Apache 代理,ProxyPreserveHost On ,保持循環
我有兩個域
域 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 的請求。