fragen stichworte

Nginx als https-Proxy

Ich muss nginx als https-Proxy einrichten, aber das hat nicht funktioniert:

$ export https_proxy="http://127.0.0.1:8081"
$ curl https://example.com
curl: (56) Received HTTP code 400 from proxy after CONNECT

Meine nginx.conf:

server {
    listen          8081;
    location/{
            proxy_pass              http://some.proxy.com:3128;
            proxy_set_header        Host            $http_host;
    }
}

antworten

Hier liegt ein Missverständnis vor. Es gibt zwei Arten von HTTP-Proxys, die zwei völlig verschiedene Tiere sind: ein Reverse-Proxy und ein Forward-Proxy. Mischen Sie sie nicht.

Forward Proxy ist für ein Client-Betriebssystem (z. B. export https_proxy) oder einen Browser sichtbar. Clientseitig weiß man, dass es etwas anders sein muss, und ein Forward-Proxy-Server verhält sich nicht wie ein normaler Webserver.

Reverse Proxy ist fast ein normaler Webserver, und das Verhalten ist für den Client nicht sichtbar. Ein Nginx-Beispiel ist proxy_pass. Es gibt ein paar schmutzige Tricks, um einen Reverse-Proxy nur eingeschränkt als Forward-Proxy für http einzusetzen, er funktioniert jedoch überhaupt nicht als Forward-Proxy für https wegen des CONNECT-Verbs.

Ein Forward-Proxy wird daher besser als "clientseitiger Proxy" bezeichnet. Ein Reverse-Proxy wäre ein "serverseitiger Proxy". (Forward/Reverse Proxy ist meiner Meinung nach eine schreckliche Nomenklatur.)

Verwenden Sie nginx nicht als Forward-Proxy. Es ist als normaler Webserver oder Reverse Proxy gedacht.