Ubuntu

做反向代理時伺服器請求 URL 出現錯誤

  • May 9, 2017

我的目標是當有人訪問時main_site.com/blog,他們會從other_site.com/example_blog. 這兩個站點都執行 Apache 2.4 和 Ubuntu(分別為 14.04 和 16.04)。

我在伺服器/var/www/html/文件夾根目錄的 index.php 頂部有以下程式碼。other_site.com

// http://stackoverflow.com/a/6768831/3774582
echo (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
die();

當我在瀏覽器中訪問 main_site.com/blog 時,我發現瀏覽器認為的完整 URL 與 PHP 認為的完整 URL 不匹配。

網址不匹配

它從 URL 中刪除“部落格”。這會導致軟體(在本例中為 WordPress)相信使用者應該被重定向到main_site.com/blog(重定向到我們已經打開的 URL)並重複此操作,直到遇到太多重定向錯誤。

除了 SSL 配置之外,other_site.com 的 apache 尚未定制。這是 main_site.com 的相關 apache

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so

SSLProxyEngine On

ProxyPreserveHost On
ProxyRequests Off
<Location /blog>
       ProxyPass https://blog.main_site.com
       ProxyPassReverse https://blog.main_site.com
       Order allow,deny
        Allow from all
</Location>

WordPress 不只是相信缺少/example_blog:它實際上是缺少的。

你應該有:

ServerName example.com

<Location /blog>
   ProxyPass https://example.org/example_blog
   ProxyPassReverse https://example.org/example_blog

您可能還需要調整Set-Cookie標頭中的域和路徑字元串:

   ProxyPassReverseCookieDomain  "example.org"  "example.com"
   ProxyPassReverseCookiePath  "/example_blog/"  "/blog/"
</Location>

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