访问代理中使用 apache 和 nginx 托管的 wordpress 时重定向到 127.0.0.1

Posted

技术标签:

【中文标题】访问代理中使用 apache 和 nginx 托管的 wordpress 时重定向到 127.0.0.1【英文标题】:Redirect to 127.0.0.1 when access a wordpress hosted with apache and nginx in proxy 【发布时间】:2016-09-06 02:23:22 【问题描述】:

我在 Apache2 上托管了一个 wordpress,前面是 nginx <WORLD> ===> <NGINX PROXY> --> APACHE/DOCKER/STATIC WEBSITE etc...

我的 wordpress 代理的 nginx 配置是:

server 
    server_name dev-www.example.com;

    location / 
        proxy_pass http://127.0.0.1:13400;
    

我的 apache 配置:

Listen 13400

<VirtualHost 127.0.0.1:13400>
        CustomLog /var/log/httpd/sites/dev-www/access_log combined
        ErrorLog /var/log/httpd/sites/dev-www/error_log

        DirectoryIndex index.php

        DocumentRoot /var/www/sites/example.com/dev-www

        RewriteEngine On

        <Directory /var/www/sites/example.com/dev-www/>
                Options Indexes FollowSymLinks
                AllowOverride all
        </Directory>

</VirtualHost>

还有wordpress.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . index.php [L]
</IfModule>

# END WordPress

问题是当我继续 dev-www.example.com/foobar.php 时,我被重定向到 127.0.0.1/foobar.php。我知道它来自nginx 配置127.0.0.1 弹出放置如何修复它?

我尝试代理传递给dev-www.example.com:13400,但我得到了一个无限循环:

[2016 年 5 月 10 日星期二 23:44:45.001680] [core:error] [pid 1096] [client 127.0.0.1:54887] AH00124:由于可能的配置错误,请求超出了 10 个内部重定向的限制。采用 'LimitInternalRecursion' 必要时增加限制。采用 'LogLevel debug' 获取回溯。,referer: http://dev-www.example.com/

注意:http://dev-www.example.comhttp://dev-www.example.com/index.php 没有问题 谢谢。

note2:如果我将 nginx 配置更改为 localhost:13400,那么我将被重定向到 localhost/login-3。它看起来像 .htaccess 重定向到 ServName,它是 127.0.0.1

【问题讨论】:

“当我继续使用 dev-www.example.com/foobar.php 时,我被重定向”是指当您将这个 URL 直接输入到浏览器的地址栏中? 是的,或者点击链接,同样的行为。 dev-www.example.com/login-3 将我重定向到 127.0.0.1/login-3 如果我将 nginx 配置更改为localhost:13400,那么我将被重定向到localhost/login-3。它看起来像 .htaccess 重定向到 ServName 并且它是 127.0.0.1 你在命令行上试过curl -D - dev-www.example.com吗? 您的.htaccess 中没有重定向。 Wordpress 必须这样做。 【参考方案1】:

这是wordpress重定向到HTTP_HOST,添加

$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];

wp-config.php 中修复它。

【讨论】:

谢谢!我保持 Wordpress 配置文件不变的最终解决方案是将 ProxyPreserveHost On 添加到代理实例(在 apache 上)。 对于 nginx 你必须添加proxy_set_header Host domain.com【参考方案2】:

听起来您已经将您的 wordpress 网站从本地开发系统导出到生产系统。很可能您也无法再进入 /wp-admin 了。在这种情况下,您必须手动更新表wp_options 中的数据库条目。查找选项siteurlhome


也请尝试将其添加到 wp-config.php(但恐怕这仅针对传出请求)

define('WP_PROXY_HOST', '1.2.3.4');
define('WP_PROXY_PORT', '13400');
# define('WP_PROXY_USERNAME', 'my_user_name');
# define('WP_PROXY_PASSWORD', 'my_password');
define('WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com');

【讨论】:

我已经改过了。没有任何变化(但我可以访问dev-www.example.com 或 /index.php),没有任何问题。 @CyrilALFARO 这些选项设置为什么? 我在 apache conf 的帖子有错误,我填写的是 IP 而不是 URL,我只是更新我的帖子。【参考方案3】:

对于 Nginx,您必须确保 Host 标头设置正确,您的示例应该是:

server 
    server_name dev-www.example.com;

    location / 
        proxy_set_header Host dev-www.example.com;
        proxy_pass http://127.0.0.1:13400;
    

【讨论】:

以上是关于访问代理中使用 apache 和 nginx 托管的 wordpress 时重定向到 127.0.0.1的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Nginx 反向代理到本地托管(在具有 ssh 访问权限的服务器上)docker-compose

Nginx和Apache 转发网络问题

Linux骚操作之第三十二话Apache和nginx

nginx负载均衡怎么访问数据库

配置 Apache 反向代理以在生产环境中托管 Laravel Echo 服务器

Nginx对于代理请求返回404,但是在直接访问时返回200