[PYTHON] Ich war festgefahren, eine Kolbenanwendung mit einem Reverse-Proxy dazwischen umzuleiten

Phänomen

Reverse Proxy mit SSL (apache mod_proxy) Backend wsgi Server (apache mod_wsgi + flask)

Eine Konfiguration, bei der ein Reverse-Proxy eine Anfrage über https empfängt und über http an den Backs-WSGI-Server weiterleitet.

Zu diesem Zeitpunkt wurde beim Umleiten mit flask die URL des Umleitungsziels im Client-Browser zu http.

Proxy-Einstellungen umkehren

<VirtualHost *:443>

    ...

    ProxyPass / http://my.wsgi.server/
    ProxyPassReverse / http://my.wsgi.server/

    ...

</VirtualHost>

mod_proxy sollte gemäß der Dokumentation eingestellt werden.

Location

curl -v http://my.wsgi.server/

Dann wurde der absolute Pfad mit http: // für Location angegeben. Anscheinend ist das das Problem. Wenn Sie einen absoluten Pfad angeben, scheint ProxyPassReverse nicht ordnungsgemäß zu funktionieren (das Schema wird nicht neu geschrieben).

In der Flasche ...

Sie können url_for (..., _scheme = "https") verwenden, um das Schema https zu erstellen. Da die Änderungen jedoch groß sind und der Backs-WSGI-Server allein nicht funktioniert, werde ich dies nicht tun.

In RFC?

Es scheint, dass relative Pfade in RFC7321 zulässig sind. https://triple-underscore.github.io/RFC7231-ja.html#section-7.1.2 Schreiben Sie den Location-Header neu.

Ort auf der wsgi-Serverseite neu schreiben

<VirtualHost *:80>

    ...

    Header edit Location ^http:// //

    ...

</VirtualHost>
curl -v http://my.wsgi.server/

Das Schema ist aus dem Speicherort verschwunden und die Umleitung über den Reverse-Proxy funktioniert jetzt ordnungsgemäß.

Recommended Posts

Ich war festgefahren, eine Kolbenanwendung mit einem Reverse-Proxy dazwischen umzuleiten
Ich möchte mit einem Knopf am Kolben übergehen
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Ich habe eine WEB-Bewerbung bei Django gemacht
Was ich getan habe, als ich mit Lambda Python im Zeitlimit steckte
Mattermost Bot mit Python gemacht (+ Flask)
Erstellt eine Web-App, die IT-Ereignisinformationen mit Vue und Flask abbildet
Ich möchte mit einem Roboter in Python arbeiten.
Iframe in Seite mit Selenium kann nicht bearbeitet werden
Arbeitsnotiz, die ich i18n mit Flask App ausprobiert habe
Ich habe einen sqlite3.OperationalError
Ich habe python3.4 in .envrc mit direnv geschrieben und es zugelassen, aber ich habe einen Syntaxfehler erhalten
Bei Verwendung von JUMAN ++ mit PyKNP ist ein Wertefehler aufgetreten
Als ich CaboCha in Python3 verfügbar machte, blieb ich stecken (Windows 10)
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Mezzanine-Einführungsnotiz, dass ich im Fluss stecken geblieben bin
Was ich an der GUI in der WSL-Python-Umgebung hängen geblieben bin
Bis Django etwas mit einem Linienbot zurückgibt!
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Flask-Erstellen Sie eine Todo-Liste mit CSRF-Maßnahmen mit WTF mit Flask
Ich erhalte einen Betriebssystemfehler: [Errno 8] Fehler beim Ausführen des Formats, wenn eine Flask-Anwendung mit einem Python-Befehl ausgeführt wird
Als ich das Verzeichnis für UNIX Socket unter / var / run mit systemd geschnitten habe, steckte ich in einer Falle und was zu tun ist
Webanwendung mit Python + Flask ② ③
Ein bisschen im Kettenschiff stecken
Webanwendung mit Python + Flask ④
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Erstellen Sie mit Chalice eine flaschen- / flaschenähnliche Webanwendung auf AWS Lambda
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Ich blieb stecken, als ich versuchte, verschiedene Dinge mit Mac El Captain Pip zu installieren