tornado的remote_ip

2018-09-13 18 0

tornado的request.remote_ip用于获取客户端IP,但是如果我们使用了代理比如Nginx后发现获取到的IP是127.0.0.1或是服务器端IP,这个时候需要在HTTPServer中的初始化参数中设置xheaders=True。Tornado通过 x-real-ip 或 x-forwarded-for来获取IP,需要nginx配置:

  1. proxy_set_header Host $host;
  2. proxy_set_header X-Real-IP $remote_addrx;
  3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

一般如果使用了CDN之类的,会经过多次转发才会到达服务器,CDN的IP地址也会记录在X-Forwarded-For中。正常来讲X-Forwarded-For的第一个IP是客户端IP,而后面的都是CDN的IP。tornado里面的remote_ip取的是最后一个ip而不是第一个,因为最后一个IP才是真实到达服务器的IP,而前面的IP都是可以伪造的。比如自己设置X-Forwarded-For头部就可以欺骗服务器了,所以tornado并没有用第一个IP而是取了最后一个IP。