Mod-Proxy

Apache 代理,ProxyPreserveHost On ,保持循環

  • May 24, 2013

我有兩個域

域 A : www.fakedomain.com ,這是客戶端中的域,當 url 為http://www.fakedomain.com/blog時,想法只是代理到 mainblog

域 B : www.mainblog.com , 這是一個多站點 wordpress bloga.mainblog.com, blogb.mainblog.com 等

我試圖將域 A 代理到域 B,但我想保留原始主機名(wordpress 需要),代理工作正常但在 php $_SERVER

$$ ‘HTTP_HOST’ $$顯示域 B (maindomain.com) 而不是“fakedomain.com”, 我讀到解決方案是添加 ProxyPreserveHost On ,但在我添加它的那一刻,該網站一直循環,直到Google瀏覽器中斷,

我雖然可能是由 Wordpress 引起的,所以我刪除了所有文件,並且我在 mainblog.com 中只有一個 index.php,但仍在循環

<VirtualHost *:80>
   DocumentRoot "d:/www/wp-multisite"
   ServerName mainblog.com
   ServerAlias *.mainblog.com 
   ErrorLog  "logs/wpmultisite-error.log"
   CustomLog "logs/wpmultisite-access.log" common

</VirtualHost>

<VirtualHost *:80>
   ServerName www.fakedomain.com

   <IfModule mod_proxy.c>
       ProxyRequests Off
       ProxyPreserveHost   On
       ProxyPass         /     http://fake.mainblog.com/
       ProxyPassReverse  /     http://fake.mainblog.com/
   </IfModule>

   ErrorLog  "logs/fake-blog-error.log"
   CustomLog "logs/fake-blog-access.log" common
</VirtualHost>

Apache 還使用 Host 標頭來辨識要使用的 VirtualHost。通過告訴 mod_proxy 保留 Host 標頭,apache 將始終使用第二個 VirtualHost 服務請求。這是您看到的循環。要解決此問題,您需要確保不使用第二個 VirtualHost 處理代理請求,儘管 Host 標頭是 www.fakedomain.com。這樣做的一種方法是在您的配置頂部添加這樣的 VirtualHost :

<VirtualHost 127.0.0.1:80>
   DocumentRoot "d:/www/wp-multisite"
   ServerName www.fakedomain.com
   ServerAlias *.mainblog.com 
   ErrorLog  "logs/wpmultisite-error.log"
   CustomLog "logs/wpmultisite-access.log" common
</VirtualHost>

然後使用 hosts 文件確保 fake.mainblog.com 在此伺服器上解析為 127.0.0.1。兩者一起將確保 mod_proxy 使用 127.0.0.1 作為後端,同時保留主機頭和 127.0.0.1 與 Host: www.fakedomain.com 將導致上述 VirtualHost 用於服務 mod_proxy 的請求。

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