Apache-2.2

Apache 代理和重寫,將目錄附加到 URL

  • September 24, 2012

我有一個從本地網路執行的後端伺服器http://10.0.2.20/,它的服務類似於:

/ (root)
|
|_user1/
| |_www/
| |_private/
|
|_user2/
 |_www/
 |_private/
(etc.)

訪問http://10.0.2.20/user1/當然包含“www”和“private”文件夾,並通過使用 Apache 的反向代理的公共伺服器進行代理。我想要它,所以會發生以下情況:

http://public-proxy-server/user1/實際上顯示了內容,http://10.0.2.20/user1/www/而沒有在 URL 中指明。(/private/ 將無法通過公共代理伺服器訪問)。

這裡的關鍵是它是動態的,所以所有請求都http://public-proxy-server/*/應該顯示來自http://10.0.2.20/*/www/. 同樣,代理目前工作正常;下面是配置:

(在公共伺服器上)

<VirtualHost *:80>
       ServerName www.domain.com
       ProxyRequests Off
       ProxyPreserveHost On
       ProxyVia full
       ProxyPass / http://10.0.2.20/
       ProxyPassReverse / http://10.0.2.20/
</VirtualHost>

(在後端伺服器上)

<VirtualHost *:80>
       ...
       #this directory contains folders 'user1' and 'user2'
       DocumentRoot /var/www/
       ...
</VirtualHost>

在反向代理伺服器上,使用ProxyPassMatch

ProxyPassMatch ^/([^/]+)/(.*)$ http://10.0.2.20/$1/www/$2

而且您可能仍然需要/根代理,因此請保留它ProxyPass- 只要確保它低於ProxyPassMatch因為它們已按順序檢查。

引用自:https://serverfault.com/questions/430989