Nginx反向代理容器化WordPress遇重定向过多问题求助
解决反向代理容器化WordPress的无限重定向与站内链接失效问题
问题分析
- 使用
$http_host作为Host头时,WordPress因协议/域名识别不匹配触发强制重定向,导致Nginx与WordPress形成循环重定向。 - 使用
localhost:81作为Host头时,WordPress生成的站内链接均指向该本地地址,导致外部访问时链接全部失效,后台无法进入。
解决方案
1. 调整Nginx配置
修改反向代理的Host头及相关转发参数,确保WordPress能识别正确的访问域名与协议:
server { root /var/www/html; listen 443 ssl; listen [::]:443 ssl; server_name [redacted].us www.[redacted].us; location / { proxy_pass http://127.0.0.1:81/; proxy_redirect off; # 传递实际访问的域名给WordPress proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; # 明确告知WordPress当前使用的协议 proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; } ssl_certificate /etc/letsencrypt/live/[redacted].us/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/[redacted].us/privkey.pem; # managed by Certbot } server { listen 80; listen [::]:80; server_name [redacted].us www.[redacted].us; # 统一将HTTP请求跳转到HTTPS,替代原有的if判断逻辑 return 301 https://$host$request_uri; }
2. 修改WordPress配置文件(wp-config.php)
由于当前无法进入后台,直接修改容器内的wp-config.php文件,强制指定站点URL并信任反向代理头部:
// 替换为你的实际域名 define('WP_HOME', 'https://[redacted].us'); define('WP_SITEURL', 'https://[redacted].us'); // 强制后台使用HTTPS,并识别反向代理传递的HTTPS协议 define('FORCE_SSL_ADMIN', true); if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
操作步骤
- 保存修改后的Nginx配置,执行
nginx -t验证配置正确性,再执行systemctl reload nginx使配置生效。 - 进入WordPress容器(例如
docker exec -it <容器名> bash),找到wp-config.php文件(通常在/var/www/html目录下),添加上述PHP代码。 - 重启WordPress容器(
docker restart <容器名>),访问站点验证是否解决问题。
内容的提问来源于stack exchange,提问作者KotjengOren
相关产品推荐
相关产品推荐

