Относится к моему вопросу окак настроить обратный прокси с помощью 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;
Обратите внимание на следующее:
- Директива listen указывает ssl.
- Сертификат и ключ сертификата указаны. Сертификат должен находиться в легкодоступном месте, поскольку он отправляется всем, кто заходит на ваш сайт. Ключ находится в месте, где доступ к нему могут получить только те пользователи, которым он нужен.
Строки 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