解決nginx 反向代理apache服務下的wordpress發生301循環重定向的問題

在使用nginx反向代碼wordpress的過程當中,因爲wordpress會對訪問的請求進行域名與端口是否與配置信息相同的判斷,將致使使用301的循環重定向錯誤。nginx

問題重現

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則會執行以下流程:wordpress

image.png

問題在於:nginx在進行數據發設置的Host並不包含端口信息,因此wordpress接收到的請求是:http://www.baeldung.cn:8000此地址與http://www.baeldung.cn:81並不相同,因此給出了重定向的回覆。瀏覽器接收到重定向,接着發起了對http://www.baeldung.cn:81的請求,周而復始瀏覽器便出了301重定向次數過多的提示。oop

解決方案

google嘗試找了些關於nginx如何反向代理wordpress或nginx反向代碼wordpress發生301 loop的問題,但並未找到答案。猜測多是因爲 wordpress這個重定向機制啓用的時間並不長,因此相關的問題暴露的很少形成的。google

經過前面的流程圖,最終猜想出瞭解決方案:轉發時設置Host時加入端口號:url

proxy_set_header Host $host:$server_port;

從新加載nginx配置後問題迎刃而解。spa

總結

當一些問題查找不出緣由的時候,須要結合控制檯返回的信息並站在軟件設計者的角度大膽地猜想一下。一旦猜出了方向,即可以按照猜的方向進行嘗試。沒準就真猜對了呢。設計

本文做者:河北工業大學夢雲智開發團隊 潘傑

歡迎各位學子報考我校代理

相關文章
相關標籤/搜索