访问代理中使用 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.com
或 http://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
中的数据库条目。查找选项siteurl
和home
。
也请尝试将其添加到 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