2010-06-24 54 views

回答

44

RequestHandler.request.remote_ip(从RequestHandler的实例)

您可以检查,如响应:

... 
class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.write(repr(self.request)) 
... 
+1

文档:http://www.tornadoweb.org/en/stable/httputil.html#tornado.httputil.HTTPServerRequest.remote_ip – trss 2016-05-10 08:07:55

22

mykhal的答案是正确的,但有时你的应用程序将在后面的代理,例如,如果您使用nginx的和UWSGI,你将永远得到类似于远程IP的127.0.0.1。在这种情况下,你需要检查的头太像:

x_real_ip = self.request.headers.get("X-Real-IP") 
remote_ip = x_real_ip or self.request.remote_ip 
+4

remote_ip = x_real_ip或self.request.remote_ip – itzhaki 2015-09-06 12:09:39

+0

@itzhaki谢谢你的建议,我更新了我的回答 – 2015-11-26 13:25:09

+1

@itzhaki @ 3k但文档(http://www.tornadoweb.org/en/stable/httputil.html#tornado.httputil.HTTPServerRequest .remote_ip)表示“如果设置了HTTPServer.xheaders,将传递负载均衡器在X-Real-Ip或X-Forwarded-For报头中提供的真实IP地址”。所以'remote_ip'最后从头部的'X-Real-Ip'或'X-Forwarded-For'返回。 – igaurav 2016-05-10 09:53:15