【问题标题】:How do I get the client IP of a Tornado request from the WebSocket Handler?如何从 WebSocket 处理程序获取 Tornado 请求的客户端 IP?
【发布时间】:2014-06-16 05:27:57
【问题描述】:
http://stackoverflow.com/questions/3110919/how-do-i-get-the-client-ip-of-a-tornado-request

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

谢谢。

【问题讨论】:

  • 没看懂,需要web-socketHandler的远程ip吗?
  • 我只需要记录通过websocket访问的用户的IP

标签: python websocket tornado


【解决方案1】:

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) 

【讨论】:

    【解决方案2】:

    如果你用nginx做代理服务器,情况会稍微复杂一点,有两种解决方案:

    选项 1:使用 self.request.remote_ip
    如果你坚持使用这种方法,你需要同时配置 nginx 和你的 tornado 应用程序。
    第 1 步:在 nginx 服务器块中添加以下任一行:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

    proxy_set_header X-Real-Ip $remote_addr;
    

    第二步:创建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', '')

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 2014-11-28
      • 1970-01-01
      • 2016-12-02
      • 2016-10-11
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多