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

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

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;

}
}spa

 

在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;server

解釋:
X-Real-IP $remote_addr :ip

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

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

X-Forwarded-For $proxy_add_x_forwarded_for:it

添加用戶的真實IP存放到X-Forwarded-For變量中(變量名能夠自定義),若是搭建了兩臺nginx在不一樣的ip上,將會獲取到用戶的真實IP和第一臺nginx的ip,以「,」隔開。io

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

若是搭建了兩臺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")

相關文章
相關標籤/搜索