如何从WebSocket处理器获取Tornado请求的客户端IP?
http://stackoverflow.com/questions/3110919/how-do-i-get-the-client-ip-of-a-tornado-request
上面的链接告诉我们如何获取请求处理程序的客户端IP地址。那么在使用Websocket处理程序时,应该怎么做呢?
谢谢。
2 个回答
4
如果你使用nginx作为代理服务器,情况会稍微复杂一些,这里有两种解决方案:
方案一:使用self.request.remote_ip
如果你坚持使用这个方法,你需要同时配置nginx和你的tornado应用。
第一步:在nginx的服务器配置块中添加以下任意一行:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
或者
proxy_set_header X-Real-Ip $remote_addr;
第二步:在创建tornado的http服务器时,添加xheader选项
server = httpserver.HTTPServer(application, xheaders=True)
这样你就可以使用self.request.remote_ip来获取你的远程IP地址了
方案二:从HttpRequest头中获取X-Real-Ip
下面的代码可以直接给你远程的真实IP:
self.request.headers.get('X-Real-Ip', '')
7
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)