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;
}
}
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.