Apache-2.2
Apache:反向代理整個域
前段時間我問了同樣的問題,但我想我的問題沒有正確。我正在嘗試將整個虛擬主機域反向代理到另一個虛擬主機的子目錄,例如http://host2.com -> http://host1.com/host2。
Apache的預設站點文件是這個
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName "host1.com" <Directory /srv/www/host1> Options Indexes FollowSymLinks MultiViews AllowOverride None Order deny,allow Allow from all </Directory> DocumentRoot /srv/www/host1 WSGIScriptAlias / /srv/www/host1/apache/django.wsgi </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName "host2.com" ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://host1.com/host2 ProxyPassReverse / http://host1.com/host2 </VirtualHost>
目前,問題是每當我訪問http://host2.com>時,它都會顯示<http://host1.com>而不是<http://host1.com/host2。我錯過了什麼?我不確定這是否重要,但 host1 是使用帶有 wsgi 的 Django 託管的。
ProxyPass
對斜線非常挑剔;由於您正在代理尾部斜杠(只是根,/
),因此您需要代理到尾部斜杠。因此,如下所示,向目標添加一些尾部斜杠應該會有所幫助。
此外,由於您代理的設備也是本地系統,您可能希望通過使用 127.0.0.1 來避免潛在的名稱解析/NAT 混淆。您在此處放置的內容與伺服器接收到的主機標頭無關,並且只要您
ProxyPreserveHost On
設置了客戶端標頭就可以通過:ProxyPreserveHost On ProxyPass / http://127.0.0.1/host2/ ProxyPassReverse / http://127.0.0.1/host2/
如果這不起作用,則可能讓 host2 提供一些臨時內容頁面來驗證您是否點擊了正確的虛擬主機。
旁注,你不想要那個
<Proxy *>
塊。它是為您在ProxyRequests on
模式下執行而建構的,並且不能按反向代理的要求工作(<Location>
改為用於訪問控制)