Nginx搭配Varnish后wp-admin无尾斜杠跳转异常如何修复?
问题根因
你遇到的跳转错误是因为后端监听8080的Nginx在处理目录(/wp-admin是目录)的301自动加斜杠跳转时,默认生成绝对路径URL,会拼接自身监听的8080端口和HTTP协议,同时代理层没有对后端返回的跳转地址做重写,最终导致跳转地址出现端口、路径、协议错误。
修复步骤
1. 修改8080端口Nginx配置,禁用绝对路径跳转
在你给出的第一个server块(监听8080的部分)中加入以下两行配置,让Nginx生成目录跳转时使用相对路径,不会拼接域名、端口、协议前缀,从根源避免错误跳转地址生成:
server { listen [::]:8080; listen 8080; server_name www.mysite.it spicy.mysite.it *.www.mysite.it *.spicy.mysite.it; port_in_redirect off; # 新增以下两行配置 server_name_in_redirect off; absolute_redirect off; # 原有其余配置保持不变 }
2. 修改443端口Nginx代理配置,补充跳转重写规则
在443端口server块的location /代理配置段,加入proxy_redirect规则,自动把后端返回的所有带HTTP、带8080端口的跳转地址,替换为当前HTTPS域名的根路径开头的地址:
location / { proxy_pass http://127.0.0.1; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $http_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-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; fastcgi_buffer_size 32k; fastcgi_buffers 4 32k; # 新增以下两行配置 proxy_redirect http://$host/ /; proxy_redirect http://$host:8080/ /; }
3. 补充WordPress配置,适配代理层HTTPS协议
因为你使用了Cloudflare+Nginx两层代理,需要让WordPress正确识别前端HTTPS协议,避免WordPress自身生成HTTP链接。在站点根目录的wp-config.php中加入以下配置:
// 识别代理层HTTPS协议 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; $_SERVER['SERVER_PORT'] = 443; } // 固定站点地址(适配roots Bedrock目录结构) define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']); define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/wp');
配置完成后执行systemctl reload nginx重载Nginx服务,清理浏览器缓存和Varnish缓存后即可验证修复效果。
内容的提问来源于stack exchange,提问作者Kormi Web Solutions
相关产品推荐
相关产品推荐

