標籤:

Nginx反向代理下,Flask獲取用戶真實ip

網站有時候需要獲取用戶的ip,以防爬蟲或者其他用途,Flask獲取用戶ip的方法是:

from flask import requestip = request.remote_addr

這種方法在調試的時候可以用,但是通過Nginx反向代理之後,這種方法獲取的ip就會全部為127.0.0.1,因此實際中,這種方法不可用。

在前幾篇筆記中(centos下通過gunicorn+nginx+supervisor部署Flask項目),介紹了Flask+Nginx+gunicorn+supervisor部署網站的過程。

最近網站實現新功能,需要用到用戶的真實ip,一開始就是用最上面的方法獲取,發現獲取的ip全是127.0.0.1,然後才想起經過了Nginx的反向代理,獲取的ip都是本地ip。

在網上搜了好久「Flask獲取nginx反向代理ip」都沒有找到滿意的結果,最後搜索「proxy_set_header」才知道原來,nginx會向後端發送一個headers,裡面就有所需要的真實ip。

因為 nginx 配置文件設置了

proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

因此通過

from flask import request ip=request.headers[X-Forwarded-For]

就可以獲取真實 ip


推薦閱讀:

Nginx 與 PHP 合併部署與分開部署 哪種性能更好一些?
【LNMP】配置二級域名
nginx快速入門之基本原理篇
10 分鐘內快速構建能夠承載海量數據的 NGINX 日誌分析與報警平台
請問nginx比apache性能高為什麼apache現在依然流行?

TAG:Nginx | Flask |