Apache-2.2
帶有 mod_rewrite 的特定虛擬主機的 ProxyPass
我有一個 Web 伺服器,它設置為動態地為不同域提供不同的文件根
<VirtualHost *:80> <IfModule mod_rewrite.c> # Stage sites :: www.[document root].server.company.com => /home/www/[document root] RewriteCond %{HTTP_HOST} ^www\.[^.]+\.server\.company\.com$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^www\.([^.]+)\.server\.company\.com(.*) /home/www/$1/$2 [L] </IfModule> </VirtualHost>
這使得它將
www.foo.server.company.com
服務於文件根目錄server.company.com:/home/www/foo/
對於其中一個站點,我需要添加一個
ProxyPass
,但我只希望它應用於那個站點。我嘗試了類似的東西<VirtualHost *:80> <Directory /home/www/foo> UseCanonicalName Off ProxyPreserveHost On ProxyRequests Off ProxyPass /services http://www-test.foo.com/services ProxyPassReverse /services http://www-test.foo.com/services </Directory> </VirtualHost>
但後來我得到了這些錯誤
此處不允許使用 ProxyPreserveHost
ProxyPass|ProxyPassMatch 在位置中定義時不能有路徑。
如何
ProxyPass
為單個虛擬主機設置一個?
只需將它
ProxyPass
移出<Directory>
塊 - 如果它在那個上下文中,它應該適用於那個確切的上下文(而不是/services
你希望它申請的那個)。實際上,你根本沒有對那個塊做任何事情,看起來像?
<VirtualHost *:80> UseCanonicalName Off ProxyPreserveHost On ProxyRequests Off ProxyPass /services http://www-test.foo.com/services ProxyPassReverse /services http://www-test.foo.com/services # and if you do need to serve from /home/www/foo... DocumentRoot /home/www/foo <Directory /home/www/foo> Order allow,deny Allow from all </Directory> </VirtualHost>
**編輯:**錯過了它實際上不是虛擬主機-您的範例只是虛擬主機塊中的一個目錄,這使我認為它們是分開的。
在這種情況下…
ProxyPreserveHost On # If it's not already: RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.foo RewriteRule ^/services(.*) http://www-test.foo.com/services$1 [P,L] ProxyPassReverse /services http://www-test.foo.com/services