一、问题原因
在编写的 Flask 服务前用 Nginx 转发请求时,如果用如下方法:
from flask import request
ip = request.remote_addr
此时获取的为 Nginx 服务器的地址。
解决方案
- 修改 Nginx 配置
转发的请求 headers
中设置真实 IP
$ vim /etc/nginx/sites-available/default
location / {
proxy_pass http://0.0.0.0:5000;
# 在配置中添加 IP 地址转发
proxy_set_header X-Real-IP $remote_addr;
}
- Flask 应用获取 IP 地址
from flask import request
request.headers.get('X-Real-Ip', '')
此时,如果请求如下:
Client[192.168.0.1] --> Nginx[192.168.0.2] --> Flask 应用[192.168.0.3]
则在 Flask 应用端可获取正确的 Client 地址 192.168.0.1。