Nginx反向代理下,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]
推薦閱讀:
※Nginx 與 PHP 合併部署與分開部署 哪種性能更好一些?
※【LNMP】配置二級域名
※nginx快速入門之基本原理篇
※10 分鐘內快速構建能夠承載海量數據的 NGINX 日誌分析與報警平台
※請問nginx比apache性能高為什麼apache現在依然流行?