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

36 投票
2 回答
26517 浏览
提问于 2025-04-16 00:23

我有一个 RequestHandler 对象,用来处理 incoming 的 post() 请求。我该怎么找到发起请求的客户端的IP地址呢?我查看了大部分 RequestHandler 的方法和属性,但似乎漏掉了什么。

2 个回答

36

mykhal的回答是对的,不过有时候你的应用程序可能会在一个代理后面,比如说你使用了nginx和UWSGI,这样你总是会得到类似127.0.0.1这样的远程IP。在这种情况下,你需要检查一下请求头,像这样:

remote_ip = self.request.headers.get("X-Real-IP") or \
            self.request.headers.get("X-Forwarded-For") or \
            self.request.remote_ip

2019年10月17日更新:还要包括一个常用的请求头X-Forwarded-For,这个头部是AWS负载均衡器等使用的。

51

RequestHandler.request.remote_ip(来自RequestHandler的实例)

你可以像下面这样查看响应:

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

撰写回答