Apache:二級目錄反向代理 – 實現不同端口服務在同一網站的訪問

應用背景:在同一服務器網頁上,通過不同目錄訪問內網的不同服務器。

開啓相應模塊:虛擬主機和代理模塊

爲了方便操作,最好啓用虛擬主機來配置:

# 在httpd.conf中取消註釋以下代碼

LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

配置虛擬主機和反向代理

在httpd_vhosts.conf中編輯:

<VirtualHost *:80>
    ProxyPass / http://127.0.0.1:8888/
    ProxyPassReverse / http://127.0.0.1:8888/
</VirtualHost>

上面是最簡單的虛擬主機反向代理:訪問這個服務器的80端口時,會自動跳轉到該服務器上8888端口的服務頁面。但是當需要在這個端口的網頁上,既能訪問網頁,又能訪問其他端口的服務,就需要通過二級目錄的反向代理,在這個網頁的地址中訪問服務。

配置二級目錄反向代理

二級目錄/service反向代理至http://127.0.0.1:8888/配置如下:

<VirtualHost *:80>
    ProxyPass /service/ http://127.0.0.1:8888/
    ProxyPassReverse /service/ http://127.0.0.1:8888/
</VirtualHost>

但是這樣配置會出現一個問題:代理的服務下若需要加載css或js等文件,即使用了相對路徑的文件,會重定向至該網頁的根目錄下,而不是/service。對於這樣的服務,如果服務的主要內容不是在該服務的根目錄下(http://127.0.0.1:8888/),而是其子目錄(http://127.0.0.1:8888/service/),就可以通過以下配置解決css文件加載錯誤的問題:

<VirtualHost *:80>
    ProxyPass /service http://127.0.0.1:8888/service/
    ProxyPassReverse /service http://127.0.0.1:8888/service/
</VirtualHost>

但是這樣配置的條件是兩個二級目錄的名稱必須是一致的,這是因爲這裏利用了一個代理路徑的錯誤:將服務的service路徑映射到/service會導致服務的 service路徑 丟失,例如 service/index.html映射到網頁中的相對路徑會變成 /index.html ,但是由於映射到/service這個二級目錄,會讓這個index.html的顯示路徑爲*/service/index.html。具體的原因未知,但是這樣的配置是實際可行的,可以解決css文件路徑錯誤的問題。

發佈了6 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章