nginx通過多級代理獲得真實用戶IP的方法


nginx的default.nginx中添加
location ~ ^/mqtt {
        proxy_pass http://emqttd:8083;
        proxy_redirect    off;
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
        # nginx支持websockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
 
說明:
1. 如果使用了多個代理,不能 使用proxy_set_header X-Real-IP $remote_addr直接得到用戶真實IP,需要使用命令 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
1)X-real-ip是一個自定義的變量名,名字可以隨意取,這樣做完之后,用戶的真實ip就被放在X-real-ip這個變量里了,然后,在web端可以這樣獲取:request.getAttribute("X-real-ip")
2)$remote_addr用於獲取到上一級代理的IP
3)$proxy_add_x_forwarded_for變量包含客戶端請求頭中的"X-Forwarded-For",與$remote_addr兩部分,他們之間用逗號分開,例如:(223.104.6.125, 10.10.10.45),第一個是用戶的真實IP,第二個是一級代理的IP,依此類推
 
2. Nginx通過在客戶端和后端服務器之間建立隧道來支持WebSockets通信。為了讓Nginx可以將來自客戶端的Upgrade請求發送到后端服務器,Upgrade和Connection的頭信息必須被顯式的設置


免責聲明!

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



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