Nginx反向代理導致PHP獲取不到正確的HTTP_HOST,SERVER_NAME,客戶端IP的解決方法


今天第一次配Nginx負載均衡,發現PHP無法獲取HTTP_HOST

 

貼上的Nginx配置

upstream abc.com {
        server 10.141.8.55:8005;
        server 10.141.8.55:8006;
}
server {
        listen 80;
        server_name www.xxx.com;
        log_not_found off;
        access_log  /var/log/nginx/html-access.log  main;
        charset utf-8;
        location / {
                proxy_pass http://abc.com;
        }
}

 

echo $_SERVER['HTTP_HOST'];

輸出abc.com

仔細查看Nginx配置,很容易發現PHP獲取到的HTTP_HOST是Nginx代理過來的。

解決的辦法有兩種

方法一,將abc.com改成你www.xxx.com

不過這種方法還不是很好,如果server_name有多個怎么辦呢

所以

方法二

在location/{}加上 proxy_set_header    Host             $host;

 

既然HTTP_HOST有問題,那其他客戶端的信息也肯定是不對的。比如客戶端IP。

所以還得加上其他配置,完整的Nginx配置如下

 

upstream abc.com {
        server 10.141.8.55:8005;
        server 10.141.8.55:8006;
}
server {
        listen 80;
        server_name www.xxx.com;
        log_not_found off;
        access_log  /var/log/nginx/html-access.log  main;
        charset utf-8;
        location / {
                proxy_pass http://abc.com;
                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    HTTP_X_FORWARDED_FOR $remote_addr;
                proxy_redirect      default;
        }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM