web-dev-qa-db-ja.com

TornadoリクエストのクライアントIPを取得するにはどうすればよいですか?

着信post() s用のRequestHandlerオブジェクトがあります。リクエストを行っているクライアントの[〜#〜] ip [〜#〜]を見つけるにはどうすればよいですか? RequestHandlerのメソッドとプロパティのほとんどを閲覧しましたが、何かを見逃しているようです。

31
mikemaccana

RequestHandler.request.remote_ip(RequestHandlerのインスタンスから)

次のように応答を調べることができます。

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

mykhalの答えは正しいですが、アプリケーションがプロキシの背後にある場合があります。たとえば、nginxとUWSGIを使用していて、リモートIPに対して常に127.0.0.1のようなものを取得する場合です。この場合、次のようにヘッダーもチェックする必要があります。

x_real_ip = self.request.headers.get("X-Real-IP")
remote_ip = x_real_ip or self.request.remote_ip
27
3k-