Während ich nginx erfolgreich für den Proxy-HTTP-Verkehr konfigurieren konnte (mithilfe dieses Handbuchs ), führten alle Versuche, HTTPS-Anforderungen als Proxy zu verwenden, zu Code 400 ( Bad Request ).
Nginx-Debug-Protokolle waren überhaupt nicht hilfreich:
2013/06/05 14:38:33 [info] 74946#0: *589
client sent invalid request while reading client request line, client: 127.0.0.1,
server: google.com, request: "CONNECT google.com:443 HTTP/1.1"
Was sind diese CONNECT
Anfragen? Ist es überhaupt möglich, proxy_pass
HTTPS-Anfragen in Nginx zu stellen?
Aktualisieren
Muss hinzugefügt werden, dass ein Proxy-Server Teil meines Webentwicklungs-Workflows / Toolkits ist. Dies ist eine großartige Möglichkeit, clientseitiges JavaScript in der Produktionsumgebung zu testen / zu debuggen (indem vor dem Proxy Umschreibungen vorgenommen werden).
Auch die Konfigurationssprache von nginx ist wohl eine eigene Programmiersprache. Es hat Variablen!
Zur Verdeutlichung: Wie ich im Kommentar-Feed meines Blogs schrieb, verarbeitet nginx keine CONNECT-Methodenaufrufe, die zum Herstellen einer rohen TCP-Verbindung zu einem Remote-Host über einen HTTP-Proxy verwendet werden Wenn Sie als Forward-Proxy arbeiten, funktioniert dies für normales HTTP nur recht gut, unabhängig davon.
Nginx hat buchstäblich keine Ahnung, was mit diesen Methodenaufrufen zu tun ist. Deshalb sind die Fehlermeldungen in den Protokollen ziemlich nutzlos. Ich habe immer festgestellt, dass ich Privoxy für HTTPS verwende: http://www.privoxy.org/ - es ist auch unglaublich einfach einzurichten. Es ist jedoch immer noch unmöglich, den Inhalt von HTTPS-Relays zu filtern oder zu entstellen, da HTTPS-Verbindungen mit einer Rohverbindung über die CONNECT-Methode verarbeitet werden und der Server keine Ahnung hat, was sie weiterleiten.
quelle
Wenn es Ihnen nichts ausmacht, nginx aus dem Quellcode zu kompilieren, können Sie ngx_http_proxy_connect_module installieren . Das Folgende funktionierte für mich in Debian 9 "Stretch" auf einem Himbeer-Pi (nachdem ich deb-src-URLs zu /etc/apt/sources.list hinzugefügt und apt-get update ausgeführt habe):
Bearbeiten Sie sie
/usr/local/nginx/conf/nginx.conf
und lassen Sie sie so aussehen (ich habe ein Beispiel für zu blockierende Domains beigefügt, das sowohl mit SSL- als auch mit Nicht-SSL-Proxys funktioniert):Dann lauf
/usr/local/nginx/sbin/nginx
. Es wird sehr glücklich mit Debians Lagerpaket koexistierennginx
, wenn Sie auch einen Produktions-Webserver auf Port 80 betreiben und nicht riskieren wollen, sich damit herumzuschlagen (aber stellen Sie sicher, dass Sie die/usr/local
Version separat beim Booten starten). Alternativ können Sie mit einer höheren Konfiguration beide Dienste von dem kompilierten Nginx ausführen. Wenn Sie Ihr kompiliertes Nginx jedoch so einstellen, dass es auf einem Port ausgeführt wird, für den Ihre Firewall Datenverkehr zulässt, müssen Sie manuell nach Nginx-Sicherheitsupdates suchen, da das Debian-Paketsystem dies nicht mehr für Sie erledigt.quelle
Ich habe gerade die Anweisungen von Silas S. Brown befolgt und konnte eine Nginx-Binärdatei kompilieren, die sich mit Weiterleitung und SSL befasst. Ich habe alles zu einem Docker-Image gebündelt. Das Dockerfile und die Konfiguration finden Sie hier auf GitHub: https://github.com/reiz/nginx_proxy .
Das Nginx Docker-Image in diesem Docker Hub-Repository kann SSL-Verbindungen und Weiterleitungen verarbeiten: https://hub.docker.com/r/reiz/nginx_proxy/ .
quelle