Назад | Перейти на главную страницу

Как направить HTTPS-трафик из прокси-контейнера nginx в контейнер веб-сайта?

У меня есть 2 контейнера докеров под управлением nginx. Первый контейнер действует как обратный прокси-сервер, который направляет трафик во второй контейнер. Во втором контейнере находятся файлы веб-сайта. У прокси-контейнера есть порты 80 и 443, открытые для публики.

В случае HTTPS я намерен сделать так, чтобы прокси-контейнер направлял трафик и позволял nginx на реальном контейнере веб-сайта обрабатывать SSL.

Благодаря этому, я надеюсь, что смогу упростить и упростить обслуживание файла конфигурации nginx в прокси-контейнере, поскольку все конфигурации SSL устанавливаются и обрабатываются nginx в контейнерах соответствующего веб-сайта.

Вот конфигурационный файл прокси-контейнера nginx:

upstream mywebsite {
    server website-container;
}

server {
    listen 80 default deferred;
    listen 443 deferred;
    server_name         mywebsite.com www.mywebsite.com;

    location / {
        proxy_pass $scheme://mywebsite;
    }
}
... other server blocks for other domains ...

А вот и конфигурационный файл контейнера nginx website-container к которому прокси-контейнер будет «передавать прокси»:

server    
    {
        listen       80;
        server_name  mywebsite.com;
        return       301 https://www.mywebsite.com$request_uri;
    }

server
    {
        listen 443;
        listen [::]:443 ssl http2;
        server_name            mywebsite.com;
        ssl_certificate        /var/www/html/cert.pem;
        ssl_certificate_key    /var/www/html/key.pem;
        root                   /var/www/html;
    }

Однако когда я захожу на сайт через HTTPS, я всегда получаю сообщение об отказе в соединении.

Я попытался удалить перенаправление на HTTPS, и похоже, что сайт HTTP работает. Таким образом, ошибка должна быть связана с HTTPS или портом 443.

Что-то не так с моим файлом конфигурации? Как я могу получить прокси-контейнер для передачи трафика HTTPS на nginx в контейнере веб-сайта, website-container?