web-dev-qa-db-ja.com

httpsプロキシとしてのNginx

Nginxをhttpsプロキシとして設定する必要がありますが、これは機能しませんでした。

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

私のnginx.conf

server {
    listen          8081;
    location / {
            proxy_pass              http://some.proxy.com:3128;
            proxy_set_header        Host            $http_Host;
    }
}
1
Pavel Nazarov

ここには誤解があります。 2つの完全に異なる動物であるhttpプロキシには、リバースプロキシとフォワードプロキシの2種類があります。それらを混ぜないでください。

フォワードプロキシはクライアントOSに表示されます(例:export https_proxy)またはブラウザ。クライアント側は、少し異なる方法で通信する必要があることを認識しており、フォワードプロキシサーバーは通常のWebサーバーのようには動作しません。

リバースプロキシはほぼ通常のWebサーバーであり、動作はクライアント側からは見えません。 nginxの例はproxy_pass。リバースプロキシをフォワードhttpプロキシとして限定的に使用するためのいくつかの汚いトリックがありますが、フォワードとしてはまったく機能しません== --- ==)httpsプロキシ CONNECT動詞のため

したがって、フォワードプロキシは「クライアント側プロキシ」という名前の方が適切です。リバースプロキシは「サーバー側プロキシ」になります。 (フォワード/リバースプロキシは、私の考えでは恐ろしい命名法です。)

フォワードプロキシとしてnginxを使用しないでください。通常のウェブサーバーまたはリバースプロキシとして使用することを目的としています。

3
kubanczyk