如何获取Tornado请求的客户端IP?
我有一个 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))
...