私の質問に関連してnginxを使用してリバースプロキシを設定する方法、SSL 接続をさらに必要とするものを設定するときに行き詰まってしまいました。
ホストシステムにマップされた SSL ポート 4430 を提供する Docker コンテナがあります。Web サーバーは自己署名証明書を使用しています。
/etc/hosts
私のファイルでは、次のように定義しています:
127.0.0.1 app.local
私の nginx サーバーの設定は次のようになります:
server {
listen 80;
server_name app.local;
location / {
return https://$host$request_uri;
}
}
server {
listen 443;
server_name app.local;
location / {
proxy_pass https://127.0.0.1:4430;
}
}
これを使用して Web アプリケーションにアクセスすると、https://127.0.0.1::4430
正常に動作します。ただし、最初は証明書に関する警告が表示されるので、それを許可する必要があります。
http://app.local
しかし、またはのいずれかで接続するとhttps://app.local
、ブラウザに次のメッセージが表示されます。
SSL connection error
ERR_SSL_PROTOCOL_ERROR
また、証明書の警告が表示されることも予想していましたが、その場合は許可できました。
nginx で SSL を使用するときにリバース プロキシを動作させるにはどうすればよいですか?
答え1
nginx で SSL を終了するには:
a) サーバーセクションではポートと「ssl」を指定する必要があります
listen 192.168.2.26:443 ssl;
b) サーバーブロックは証明書とSSLパラメータも指定します。
ssl_certificate new-cert.cer;
ssl_certificate_key new-cert.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
答え2
ほぼ完成していると思います (私自身 Nginx は初心者です) が、2 番目のサーバー ブロックにはもう少し追加が必要です... 私のサーバーには次のようなブロックがあります:
listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
charset utf-8;
client_max_body_size 75M;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
次の点に注意してください。
- listen ディレクティブは ssl を指定します。
- 証明書と証明書キーが指定されます。証明書は、サイトにアクセスするすべての人に送信されるため、アクセスしやすい場所に置く必要があります。キーは、それを必要とするユーザーだけがアクセスできる場所に置いてください。
ipv6、charset、client max の本体は私のサーバー上にある行ですが、ここで行っている作業には必要ありません。これらの行には任意の名前を付けて、どこにでも配置できます。そのため、別の場所に保存する場合は、正確なファイル名や場所にこだわる必要はありません。これは私が好んで行う方法で、出力は次のようにls -l
なります。
-rw-r--r-- 1 root root 1887 Oct 8 14:16 /etc/ssl/certs/example.com.crt
-rw-r----- 1 root ssl-cert 1704 Oct 8 13:47 /etc/ssl/private/example.com.key