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

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

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

У меня есть контейнер докеров, который предоставляет сопоставленный 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?

Чтобы отключить 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;

Вы близки, я думаю (я сам новичок в 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