使用nginx代理后,獲取用戶真實ip


使用nginx轉發請求時,應用中獲取到的用戶ip 都是127.0.0.1,獲取真實ip必須重寫一些頭部才行。通常在WSGI環境中經常使用的變量:REMOTE_ADDR ,在nginx轉發時設置頭部攜帶這個變量

nginx設置

 

server {
listen 80;
server_name _;
location / {
..................
proxy_pass http://127.0.0.1:8000/;
# $host 變量,Host 為變量名
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}
}

 

在nginx中添加配置:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;

解釋:
X-Real-IP $remote_addr :

將用戶的真實IP存放到X-Real-IP這個變量中(變量名可以自定義)

獲取:
request.getHeader("X-Real-IP")

X-Forwarded-For $proxy_add_x_forwarded_for:

添加用戶的真實IP存放到X-Forwarded-For變量中(變量名可以自定義),如果搭建了兩台nginx在不同的ip上,將會獲取到用戶的真實IP和第一台nginx的ip,以“,”隔開。

$proxy_add_x_forwarded_for中包含了客戶端請求頭中的"X-Forwarded-For"和$remote_addr兩個部分。

如果搭建了兩台nginx在不同的ip上:

經過第一個nginx的時候,此時"X-Forwarded-For"為null,"X-Forwarded-For"默認為null,只有$remote_addr,$remote_addr中就是用戶的真實ip,所以此時的"X-Forwarded-For"中的值就是用戶的真實ip,
經過第二個nginx的時候,此時"X-Forwarded-For"中包含了用戶的真實ip,$remote_addr值為上一個nginx的ip
所以經過兩個nginx之后,獲取到的值是:客戶端ip和上一個nginx的ip

獲取:
request.getHeader("X-Forwarded-For")

X-Forwarded-For $http_x_forwarded_for:

將用戶的真實IP存放到X-Forwarded-For這個變量中(變量名可以自定義)

獲取:
request.getHeader("X-Forwarded-For")


免責聲明!

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



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