在应用 nginx 反向代码 wordpress 的过程中,因为 wordpress 会对拜访的申请进行域名与端口是否与配置信息雷同的判断,将导致应用 301 的循环重定向谬误。
问题重现
nginx 配置如下:
server {
listen 81;
server_name www.baeldung.cn;
error_log /mengyunzhi/log/baeldung.cn-nginx.log info;
add_header Cache-Control public;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 转发 host 信息
proxy_set_header Host $host;
wordpress 设置站点的 url 地址为:http://www.baeldung.cn:81
。
则在上述两个配置下应用浏览器拜访:http://www.baeldung.cn:81 则会执行如下流程:
问题在于:nginx 在进行数据发设置的 Host 并不蕴含端口信息,所以 wordpress 接管到的申请是:http://www.baeldung.cn:8000
此地址与 http://www.baeldung.cn:81
并不相同,所以给出了重定向的回复。浏览器接管到重定向,接着发动了对 http://www.baeldung.cn:81
的申请,周而复始浏览器便出了 301 重定向次数过多的提醒。
解决方案
google 尝试找了些对于 nginx 如何反向代理 wordpress 或 nginx 反向代码 wordpress 产生 301 loop 的问题,但并未找到答案。猜测可能是因为 wordpress 这个重定向机制启用的工夫并不长,所以相干的问题裸露的不多造成的。
通过后面的流程图,最终猜测出了解决方案:转发时设置 Host 时退出端口号:
proxy_set_header Host $host:$server_port;
从新加载 nginx 配置后问题迎刃而解。
总结
当一些问题查找不出起因的时候,须要联合控制台返回的信息并站在软件设计者的角度大胆地猜想一下。一旦猜出了方向,便能够依照猜的方向进行尝试。没准就真猜对了呢。
本文作者:河北工业大学梦云智开发团队 潘杰
欢送各位学子报考我校!