Nachdem wir die Tornado-Anwendung mit der folgenden Nginx-Konfiguration bereitgestellt haben
upstream frontends {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
Alle in tornado.log angeforderten IP-Anfragen werden als 127.0.0.1 angezeigt, ähnlich wie folgt[I 130125 21:44:54 web:1447] 200 GET / (127.0.0.1) 16.00ms
Wie kann ich dafür sorgen, dass die IP-Adresse in tornado.log als echte IP angezeigt wird, wenn der Nginx-Reverse-Proxy verwendet wird?
Richtige Antwort: Zusätzlich zur korrekten Nginx-Konfiguration muss, was noch wichtiger ist, xheaders=True im Tornado-httpserver festgelegt werden
tornado.httpserver.HTTPServer(Application(), xheaders=True)
tornado中可以通过
来获取,不过可能有时候有些问题,见github上的这个issue:https://github.com/facebook/tornado/i...
原理是读一些HTTP头
类似的,PHP中的实现如下:
如果是反向代理的话可以在nginx 中加入这么一个配置:
proxy_pass http://frontends;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;