#docker #nginx #ssl #reverse-proxy
#докер #nginx #ssl #обратный прокси-сервер
Вопрос:
там. У меня есть обратный прокси-сервер docker nginx, настроенный с помощью ssl по такой конфигурации:
server { listen 80; server_name example.com; location / { return 301 https://$host$request_uri; } location /.well-known/acme-challenge/ { root /var/www/certbot; } } server { listen 443 ssl; server_name example.com; root /var/www/example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # some locations location ... { ... } }
Сертификаты настроены с помощью certbot и работают довольно хорошо. Все контейнеры готовы и работают. Но у меня на сервере запущено несколько веб-сайтов. Они управляются местным NginX. Поэтому я установил порты для docker NginX следующим образом:
nginx: image: example/example_nginx:latest container_name: example_nginx ports: - "8123:80" - "8122:443" volumes: - ${PROJECT_ROOT}/data/certbot/conf:/etc/letsencrypt - ${PROJECT_ROOT}/data/certbot/www:/var/www/certbot command: "/bin/sh -c 'while :; do sleep 6h amp; wait ${!}; nginx -s reload; done amp; nginx -g "daemon off;"'"
Порт 80 докера сопоставляется с локальным портом 8123 (http). Порт 443 докера сопоставляется с локальным портом 8122 (https). Чтобы передать запрос из локального NginX в контейнер docker NginX, я использую следующую конфигурацию:
server { listen 80; server_name example.com; location / { access_log off; proxy_pass http://localhost:8123; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_redirect off; proxy_set_header X-Forwarded-Host $server_name; } } server { listen 443 ssl; server_name example.com; location / { access_log off; proxy_pass https://localhost:8122; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_redirect off; proxy_set_header X-Forwarded-Host $server_name; } }
Когда я открываю веб-сайт, он работает, но сертификат, похоже, сломан, и мои веб-сайты выходят из строя.
Мой вопрос: как я могу передать обработку ssl из локального NginX в docker NginX, чтобы она работала должным образом? ~
~
~
Комментарии:
1. У вас есть автоматическое перенаправление HTTP -gt; HTTPS? Если ответ отрицательный, то что произойдет, если вы вручную введете https:// в адресную строку браузера?
2. Это работает так же, как и с перенаправлением HTTP -gt; HTTPS.