解决nginx 反向代理apache服务下的wordpress发生301循环重定向的问题

在使用nginx反向代码wordpress的过程中,由于wordpress会对访问的请求进行域名与端口是否与配置信息相同的判断,将导致使用301的循环重定向错误。

问题重现

nginx配置如下:

server {                    
    listen       81;        
    server_name  www.codedemo.club;
    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则会执行如下流程:

image.png

问题在于: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配置后问题迎刃而解。

Nginx 配置 301 实现强制 https 和域名跳转 – 孤鸿的天空

解决nginx 反向代理apache服务下的wordpress发生301循环重定向的问题 – 梦云智开发团队 – SegmentFault 思否

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/webdev/315231.html

(0)
上一篇 2024年11月26日 15:27
下一篇 2024年12月3日 14:50

相关推荐

发表回复

登录后才能评论