
サーバー上で複数のサイトを提供したい。各サイトはdocker-composeビルドとしてラップし、それぞれに1つのポートをリッスンする独自のnginxを持っている。
ホスト名が site1.com のサイトがあります。docker compose はポート 81 を公開します。
...
services:
web:
image: nginx
...
ports:
- '81:443'
...
...
そして、クライアントnginx(コンテナ内)は443ですべてをリッスンし、すべてのSSL設定を持っています
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/fullchain1.pem;
ssl_certificate_key /etc/letsencrypt/privkey1.pem;
# ...
# and everything else
}
以下はホスト nginx です。server_name に従ってポート 80 から 81 に渡しています。
server {
listen 80;
listen [::]:80;
server_name site1.com;
location / {
proxy_pass https://localhost:81;
}
}
今のところは動作しています。ただし、安全ではありません。そのため、443 転送を追加してみます。
server {
listen 443;
listen [::]:443;
server_name bederdinov.me;
location / {
proxy_pass https://localhost:81;
}
}
https://site1.com
Nginxは正常に再起動しましたが、ERR_SSL_PROTOCOL_ERROR
非常に明白なようです - ホスト nginx は SSL でリクエストを処理しようとしていますが、docker クライアント nginx だけがその方法を知っています
ホスト nginx に何もする必要がなく、すべての作業をクライアント nginx に渡すだけであることを伝えるにはどうすればよいですか? または、このタスクに使用できる別のサーバー ソフトウェアがあるでしょうか?
答え1
SSL ターミネーションは、コンテナ外の nginx によって処理されます。そこで SSL オプションを構成する必要があります。リバース プロキシと同じホスト上で実行されている限り、コンテナ内で SSL を構成する必要はありません。