Введение
У меня есть сервер разработки (в настоящее время работает Ubuntu 14.04 LTS), который я уже некоторое время использую для размещения различных инструментов разработки на разных портах. Поскольку порты могут быть трудно запомнить, я решил использовать порт 80 для всех моих служб и выполнять переадресацию портов внутренне, основываясь на имени хоста.
Вместо того, чтобы писать domain.com:5432, я могу просто получить к нему доступ через sub.domain.com
Например, приложение X, которое использует порт 7547 и работает на sub.domain.com, имеет следующую конфигурацию nginx:
upstream sub {
server 127.0.0.1:7547;
}
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
access_log /var/log/nginx/sub.log combined;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:7547;
proxy_set_header Authorization "";
}
}
Вопрос
Учитывая текущую структуру конфигурации, которую я выбрал, возможно ли использовать letsencrypt и запускать различные службы под https?
nginx
https
jira
lets-encrypt
0x450
источник
источник
Ответы:
Да, вы можете получать запросы прокси-сервера nginx к HTTP-серверам, а затем сами отвечать клиентам по HTTPS. При этом вы должны быть уверены, что соединение прокси-сервера nginx <-> вряд ли будет прослушано кем-либо из ваших предполагаемых атакующих. Достаточно безопасные подходы могут включать:
Проксирование другого хоста в общедоступном Интернете вряд ли будет достаточно безопасным.
Ниже приведены инструкции по получению сертификата Let's Encrypt с использованием того же веб-сервера, который вы используете в качестве прокси.
Запрос вашего начального сертификата от Let's Encrypt
Измените ваше
server
предложение, чтобы разрешить обслуживание подкаталога.well-known
из локального каталога, например:http://sub.domain.com/.well-known
Именно здесь серверы Let's Encrypt будут искать ответы на возникающие проблемы.Затем вы можете использовать клиент certbot для запроса сертификата в Let's Encrypt с помощью плагина webroot (как root):
Ваш ключ, сертификат и цепочка сертификатов теперь будут установлены в
/etc/letsencrypt/live/sub.domain.com/
Настройка nginx для использования вашего сертификата
Сначала создайте новое предложение сервера следующим образом:
Перезагрузить nginx:
Убедитесь, что HTTPS теперь работает, посетив
https://sub.domain.com
иhttps://www.sub.domain.com
в своем браузере (и любых других браузерах, которые вы специально хотите поддерживать) и убедитесь, что они не сообщают об ошибках сертификата.Рекомендуем также ознакомиться с raymii.org: Надежная защита SSL на nginx и протестировать свою конфигурацию в лабораториях SSL .
(Рекомендуется) Перенаправить HTTP-запросы на HTTPS
После того как вы подтвердите, что ваш сайт работает с
https://
версией URL-адреса, а не для того, чтобы некоторые пользователи обслуживали небезопасный контент из-заhttp://sub.domain.com
перехода, перенаправьте их на HTTPS-версию сайта.Замените весь
server
пункт 80 порта следующим :Вы также должны теперь раскомментировать эту строку в конфигурации порта 443, чтобы браузеры даже не пробовали использовать HTTP-версию сайта:
Автоматически обновлять ваш сертификат
Вы можете использовать эту команду (как root), чтобы обновить все сертификаты, известные certbot, и перезагрузить nginx, используя новый сертификат (который будет иметь тот же путь, что и ваш существующий сертификат):
certbot будет пытаться обновить только сертификаты, срок действия которых превышает 60 дней, поэтому безопасно (и рекомендуется!) запускать эту команду очень регулярно и автоматически, если это возможно. Например, вы можете ввести следующую команду
/etc/crontab
:Вы можете протестировать обновления с помощью пробного запуска, который свяжется с промежуточными серверами Let's Encrypt, чтобы провести реальный тест связи с вашим доменом, но не сохранит полученные сертификаты:
Или вы можете форсировать раннее обновление с помощью:
Примечание: вы можете пробовать неограниченное количество раз, но для реальных обновлений действуют ограничения скорости Let's Encrypt .
источник
certbot
или любого другого инструмента, вы не можете забыть указать свой домен в формате www и не www для работы.location /.well-known
, вам нужно выйти.well-known
в путь. Используйтеalias /var/www/sub.domain.com
, неalias /var/www/sub.domain.com/.well-known
location '/.well-known' {
, Не уверен, что это версия или просто мои настройки, но на случай, если кто-то еще застрянет.Да, вы можете использовать в
nginx
качестве конечной точки https и сотрудничать с бэкэндами через http. Например мой конфиг:Но, как я знаю, с помощью функции «Зашифровать» вы должны указывать все субдомены при получении сертификата, и если это проблема, тогда вы выбираете URL
https://host/service
вместоhttps://service.host
источник