Nginx 转发真实 IP

Nginx 系列

Posted by ZYT on September 12, 2019

一、问题原因

在编写的 Flask 服务前用 Nginx 转发请求时,如果用如下方法:

from flask import request

ip = request.remote_addr

此时获取的为 Nginx 服务器的地址。

解决方案

  1. 修改 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;
}
  1. 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。