问题描述

Nginx代理gunicorn时,log中记录的不是用户IP。

解决方法

Nginx转发IP

设置proxy_set_header X-Real-IP $remote_addr,将用户信息发给gunicorn。

1
2
3
4
5
6
7
location /api {
proxy_pass http://zy_ems;
$proxy_set_header Host $host;
$proxy_set_header X-Real-IP $remote_addr;
$proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}

gunicorn输出IP

设置gunicorn的access_log_format

1
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" "%({X-Real-IP}i)s"'

其中”%({X-Real-IP}i)s“是用户IP。

具体格式可参考: gunicorn官网(logging)