一、問題概述
在通過Nginx負載均衡的情況下,gunicorn的log中記錄的訪問訪問日誌並不是用戶的IP,而是Nginx主機的IP。
二、解決方法
1. Nginx配置:
其中proxy_set_header X-Real-IP $remote_addr;
在請求頭中加入了真實的用戶IP信息,並一起發送給了後端的gunicorn 服務。
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;
}
2. gunicorn配置
在gunicorn的啓動配置文件中添加下面一段配置:
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。
具體關於日誌格式的定製可參考:
1. gunicorn官網(logging)
2.Gunicorn doesn’t log real ip from nginx
三、實現效果
上面兩條日誌爲訪問配置前,日誌的內容只有nginx的ip,最後一條日誌爲配置後,除了有nginx的ip之外,追加了用戶的ip信息。
Email : [email protected]
Website : http://beyonderwei.com
WeChat: