如何从WebSocket Handler获取Tornado请求的客户端IP?

时间:2014-06-16 05:27:57

标签: python websocket tornado

http://stackoverflow.com/questions/3110919/how-do-i-get-the-client-ip-of-a-tornado-request

上面的链接告诉我们如何为请求处理程序派生客户端IP。使用Websocket Handler时怎么样?

感谢。

2 个答案:

答案 0 :(得分:3)

如果你使用nginx作为代理服务器,情况会有点复杂,有两种解决方案:

选项1:使用self.request.remote_ip
如果你坚持使用这种方法,你需要配置nginx和你的龙卷风应用程序 步骤1:在nginx服务器块中添加任一个fllowing行:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-Ip $remote_addr;

第2步:创建tornado httpserver时,添加xheader选项

server = httpserver.HTTPServer(application, xheaders=True)

然后您可以使用 self.request.remote_ip 立即获取您的远程IP地址

选项2:从HttpRequest标头获取X-Real-Ip
以下代码将直接为您提供远程真实IP:

self.request.headers.get('X-Real-Ip', '')

答案 1 :(得分:2)

class WebSocketHandler扩展RequestHandler

class WebSocketHandler(tornado.web.RequestHandler):

所以,你可以这样得到ip:

class SocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        logging.info('Client IP:' + self.request.remote_ip)