[PYTHON] Wie bekomme ich IP bei Tornado + Nginx

Beim Abrufen einer Client-IP-Adresse in Tornado

#!/usr/bin/python
# -*- coding: utf-8 -*-

from tornado import web,ioloop

class IndexHandler(web.RequestHandler):
    def get(self):
        ip = self.request.remote_ip
        self.write(ip)

handlers = [
    (r'/', IndexHandler),
]

settings = dict(
    debug = True,
)

app = web.Application(handlers, **settings)
app.listen(8000)
ioloop.IOLoop.instance().start()

Sie können es bei bekommen.

Aber mit Nginx

http {
    upstream example.server.com {
        server 127.0.0.1:8000;
    }
    server {
        listen 80;
        server_name example.server.com;
        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass example.server.com;
            proxy_next_upstream error;
        }
    }
}

Wenn Sie Tornado mit den oben genannten Einstellungen ausführen, lautet die IP 127.0.0.1.

Also Tornados IndexHandler

class IndexHandler(web.RequestHandler):
    def get(self):
        ip = self.request.headers['X-Real-IP']
        self.write(ip)

Wenn Sie es als geben, konnte ich es sicher bekommen.

Da sich Nginx wie ein Road Balancer verhält, ist es natürlich, wenn man darüber nachdenkt, aber zuerst habe ich es nicht bemerkt und war ein wenig süchtig. .. ..

Recommended Posts

Wie bekomme ich IP bei Tornado + Nginx
So erhalten Sie die Python-Version
So fügen Sie sudo hinzu, wenn Sie das Debug ausführen
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Wie fange ich mit Django an?
So melden Sie sich bei Docker + NGINX an
So erhalten Sie die Eltern-ID mit sqlalchemy
Wie man lange Einschlüsse loswird
Wie bekomme ich Stacktrace in Python?
Programmgesteuert eine lokale IP-Adresse abrufen
So erhalten Sie eine farbige Ausgabe an die Konsole
So starten Sie Python (Flask) beim Start von EC2
[Django] So beheben Sie Fehler bei der Installation von mysqlclient
So erhalten Sie Ergebnisse von id in Celery
[Django] So erhalten Sie Daten durch Angabe von SQL.
So erhalten Sie Hilfe in einer interaktiven Shell
So beheben Sie, wenn der Terminaleingang abnormal wird
So erhalten Sie Artikeldaten mithilfe der Qiita-API
Wie man sich erinnert, wenn man ein Wort vergisst
So erhalten Sie Elemente vom Typ Wörterbuch von Python 2.7
So erhalten Sie die Dateien im Ordner [Python]
So installieren Sie PyCPX (OSX Yosemite, Canopy)
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
So erhalten Sie den Variablennamen selbst in Python
So erhalten Sie mehrere Modellobjekte zufällig in Django
So ermitteln Sie die Anzahl der Stellen in Python
[Ansible] Verwendung der SSH-Kennwortauthentifizierung bei der Ausführung von ansible
Hinweise zur Verwendung beim Kombinieren von pandas.DataFrame
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
So deaktivieren Sie die Referenzfunktion bei der Ausgabe von PyYaml
Zugriff mit dem Cache beim Lesen von_json mit Pandas
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
Beenden bei Verwendung von Python in Terminal (Mac)
Wie man mit Python-Flüchen ein Urteil über das Mausrad erhält
Wie man schneller schreibt, wenn man numpy wie deque verwendet
Wovon ich süchtig war, als ich Python Tornado benutzte
[Linux] Wie Sie Ihre IP in eine Variable einfügen
So erhalten Sie RGB- und HSV-Histogramme mit OpenCV
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Wie man Shogun benutzt
Verwendung von Pandas 2
Wie man PyPI liest
So installieren Sie pip
Verwendung von Virtualenv
Verwendung von numpy.vectorize
So aktualisieren Sie easy_install
So installieren Sie archlinux
Verwendung von pytest_report_header
Wie man Gunicorn neu startet
So installieren Sie Python
Wie zum virtuellen Host
Wie man Selen debuggt
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Wie man JSON liest