Apache-2.2

Apache:反向代理整個域

  • March 31, 2011

前段時間我問了同樣的問題,但我想我的問題沒有正確。我正在嘗試將整個虛擬主機域反向代理到另一個虛擬主機的子目錄,例如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 提供一些臨時內容頁面來驗證您是否點擊了正確的虛擬主機。

旁注,你不想要那個&lt;Proxy *&gt;塊。它是為您在ProxyRequests on模式下執行而建構的,並且不能按反向代理的要求工作(&lt;Location&gt;改為用於訪問控制)

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