Как настроить обратный прокси-сервер SSL с помощью nginx?

Как настроить обратный прокси-сервер SSL с помощью nginx?

Относится к моему вопросу окак настроить обратный прокси с помощью nginx, теперь я застрял при настройке того, который дополнительно требует SSL-соединения.

У меня есть контейнер Docker, который предоставляет сопоставленный SSL-порт 4430 моей хост-системе. Веб-сервер использует самоподписанный сертификат.

В своем /etc/hostsфайле я определил:

127.0.0.1 app.local

А мой конфиг сервера nginx выглядит так:

server {
    listen 80;
    server_name app.local;
    location / {
        return https://$host$request_uri;
    }
}

server {
    listen 443;
    server_name app.local;
    location / {
        proxy_pass https://127.0.0.1:4430;
    }
}

Когда я захожу в свое веб-приложение, используя https://127.0.0.1::4430его, все работает нормально. Однако в первый раз я получаю предупреждение о сертификате, которое мне затем приходится разрешить.

Однако при подключении к нему через http://app.localили https://app.localмой браузер показывает:

SSL connection error
ERR_SSL_PROTOCOL_ERROR

Я также ожидал появления предупреждения о сертификате, которое я мог бы разрешить.

Как заставить работать обратный прокси при использовании SSL с nginx?

решение1

Чтобы завершить SSL на nginx:

а) В разделе сервера необходимо указать порт и «ssl»

listen 192.168.2.26:443 ssl;

б) Затем блок сервера также указывает сертификаты и параметры SSL.

ssl_certificate      new-cert.cer;
ssl_certificate_key  new-cert.key;

ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;

решение2

Думаю, вы близки к цели (я сам новичок в Nginx), но вашему второму серверному блоку нужно немного больше... У меня на сервере есть такой:

listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
charset utf-8;
client_max_body_size 75M;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;

Обратите внимание на следующее:

  1. Директива listen указывает ssl.
  2. Сертификат и ключ сертификата указаны. Сертификат должен находиться в легкодоступном месте, поскольку он отправляется всем, кто заходит на ваш сайт. Ключ находится в месте, где доступ к нему могут получить только те пользователи, которым он нужен.

Строки ipv6, charset и client max body есть у меня на сервере, но они не нужны для того, что вы делаете здесь. Вы можете назвать их как угодно и разместить их где угодно, так что не зацикливайтесь на точном имени файла или местоположении, если вы храните свой где-то еще. Вот как мне нравится это делать, и мой ls -lвывод:

-rw-r--r-- 1 root root 1887 Oct  8 14:16 /etc/ssl/certs/example.com.crt
-rw-r----- 1 root ssl-cert 1704 Oct  8 13:47 /etc/ssl/private/example.com.key

Связанный контент