
내 서버에서 여러 사이트를 서비스하고 싶습니다. docker-compose 빌드로 래핑하려는 각 사이트에는 하나의 단일 포트를 수신하는 자체 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
}
그리고 여기에 server_name에 따라 포트 80에서 81로 전달되는 호스트 nginx가 있습니다.
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;
}
}
Nginx는 잘 다시 시작되지만, 이동하면 https://site1.com
다음과 같은 메시지가 나타납니다.ERR_SSL_PROTOCOL_ERROR
꽤 분명한 것 같습니다. 호스트 nginx가 SSL을 사용하여 요청을 처리하려고 하지만 docker 클라이언트 nginx만이 이를 수행하는 방법을 알고 있습니다.
호스트 nginx에 아무것도 할 필요가 없고 모든 작업을 클라이언트 nginx에 전달하기만 하면 어떻게 알 수 있나요? 아니면 이 작업에 사용할 수 있는 다른 서버 소프트웨어가 있을까요?
답변1
SSL 종료는 컨테이너 외부의 nginx에 의해 처리됩니다. 여기서 SSL 옵션을 구성해야 합니다. 역방향 프록시와 동일한 호스트에서 실행되는 한 컨테이너 내부에 SSL을 구성할 필요가 없습니다.