HTTPSのフォワードプロキシとしてのNginx

https nginx proxy

(このガイドを使用して) HTTP トラフィックをプロキシするように nginx を設定することに成功しましたが、HTTPS リクエストをプロキシしようとすると、すべての試みでコード 400 (Bad Request) が発生しました

Nginxのデバッグログは全く参考になりませんでした

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"

これらのCONNECTリクエストは何ですか?nginx で proxy_pass HTTPS リクエストを行うことは可能でしょうか?

Update

プロキシサーバは私のウェブ開発ワークフロー/ツールキットの一部であることを追加する必要があります。本番環境でクライアントサイドのJavaScriptをテスト/デバッグするのに最適な方法です(プロキシの前にリライトを使用)

また、nginxの設定言語は、それ自体がプログラミング言語であると言っても過言ではありません。それは変数を持っています!

  26  None  2013-06-05


ベストアンサー

nginxはSSLのフォワードプロキシモードをサポートしていないようです。代わりに Squid のようなものを使う必要があります。以下は nginx の作者からの説明をまとめたリンクです。HTTPS と nginx をフォワードプロキシにする

18  Zorayr  2013-06-05


はっきりさせたいのですが、ブログのコメントフィードに書いたように、nginx は HTTP プロキシを介してリモートホストに生の TCP 接続を確立するために使用される CONNECT メソッドコールを扱いません – nginx がフォワードプロキシとして動作しないことを考えると、これは理にかなっています

Nginx は文字通り、これらのメソッド呼び出しをどうすればいいのかわからないので、ログのエラーメッセージが役に立たないのです。私はいつも HTTPS に privoxy を使っています: http://www.privoxy.org/ – 設定も非常に簡単です。しかし、HTTPS 接続は CONNECT メソッドを介して生の接続で処理され、サーバは何を中継しているのか分からないので、HTTPS リレーの内容をフィルタリングしたり、混乱させたりすることはまだ不可能です

7  Magnus  2013-07-24


ソースから nginx をコンパイルすることに抵抗がなければ、ngx_http_proxy_connect_module をインストールすることができます。Raspberry Pi 上の Debian 9 “Stretch” で以下のように動作しました (deb-src URL を /etc/apt/sources.list に追加し、apt-get update を行った後)

cd /tmp &&
apt-get source nginx &&
git clone https://github.com/chobits/ngx_http_proxy_connect_module &&
cd nginx-* &&
patch -p1 < ../ngx_http_proxy_connect_module/proxy_connect.patch &&
sudo apt-get install libpcre3-dev &&
./configure --add-module=/tmp/ngx_http_proxy_connect_module &&
make && sudo make install

次に/usr/local/nginx/conf/nginx.confを編集して、このようにします(ブロックしたいドメインの例を載せましたが、SSLプロキシでも非SSLプロキシでも動作します)

user www-data;
worker_processes auto;
events { }
http {
server_names_hash_bucket_size 128;
server {
listen       8888;
server_name  spam.example.com *.spam.example.com;
server_name  spam2.example.com *.spam2.example.com;
access_log off;
return 404;
}
server {
listen       8888;
server_name ~.+;
proxy_connect;
proxy_max_temp_file_size 0;
resolver 8.8.8.8;
location / {
proxy_pass http://$http_host;
proxy_set_header Host $http_host;
}
}
}

それから /usr/local/nginx/sbin/nginx を実行してください。本番用のウェブサーバを 80 番ポートで運用していて、それをいじくりまわしたくない場合は、Debian の純正 nginx パッケージと共存することができます (ただし、起動時に /usr/local バージョンを個別に起動するようにしてください)。しかし、コンパイルした nginx をファイアウォールが許可しているポートで実行するように設定した場合、Debian パッケージシステムが nginx のセキュリティアップデートを手動でチェックしなければならないことに注意してください

3  Silas S. Brown  2017-10-18


Silas S. Brownさんの指示に従っただけですが、フォワーディングやSSLに対応できるNginxバイナリをコンパイルすることができました。すべてをDockerイメージにバンドルしました。Dockerfileと設定はGitHubにあります。https://github.com/reiz/nginx_proxy

このDocker HubリポジトリにあるNginxのDockerイメージでは、SSL接続と転送を扱うことができます。https://hub.docker.com/r/reiz/nginx_proxy/

1  Robert Reiz  2017-11-22


タイトルとURLをコピーしました