2010-06-24 97 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