执行反向代理时服务器请求URL出现错误

执行反向代理时服务器请求URL出现错误

我的目标是当有人访问时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 不匹配

它会从 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>

答案1

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>

相关内容