Как передать обработку SSL из локального NginX в Docker NginX?

#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.