localnet
@localnet

Как с помощью Letsencrypt и Nginx получить сертификат — один домен с двумя IP адресами?

Есть две A-записи в DNS на example.myapp.com, например, 1.1.1.1 и 2.2.2.2 (то есть балансировка через DNS). К DNS-серверу доступа нет.

Как на обоих серверах получить сертификат для example.myapp.com через letsencrypt? То есть, при вызове на хосте 1.1.1.1:
letsencrypt certonly -a webroot -w /var/www/acme -d example.myapp.com
благодаря балансировке DNS у нас проверяющий бот от letsencrypt может рандомно попасть как на 1.1.1.1, так и на 2.2.2.2, и будет ошибка.

Какие способы решения есть? Я нагуглил про схему с редиректом на одной ноде на другу при обращении на location /.well-known:

return 301 http://node2.myapp.com$request_uri;

чтобы типа бот letsencrypt всегда попадал на вторую ноду для проверки. Я сделал так и у меня ничего не получилось, да и я не пойму логики: ну вот средиректится он на второй хост, а дальше то что? как он создаст там временный файл в /.well-known/acme-challenge/<token> для подтверждения права владения сервером? Так бы получилось если у letsencrypt была возможность не генерировать случайный файл, а использовать какой-нибудь статический файл для подтверждения, который я положу и он проверит на второй ноде, но такого я что-то не нашел, либо плохо смотрел.
  • Вопрос задан
  • 724 просмотра
Решения вопроса 2
1. Вариант
синхронизируйте папку /var/www/acme между серверами, можно в принципе даже не париться и подмонтировать одну к другой через fstab
2. Вариант в location /.well-known впишите прокси пасс на соседний сервер но поскольку может быть и тут и там, то
не просто прокси а в 404 ошибку, в таком случае вы будите отдавать его локально, если 404 то оттуда .
Или челез upstream.
Ответ написан
jamakasi666
@jamakasi666
Просто IT'шник.
Все довольно просто.
У вас 2 хоста:
-на первом делаете редирект для acme
-на втором у вас сам acme. И тут же крутится бот certbot . Он по шедулеру запускается когда надо обновить сертификаты и создает тот самый /.well-known/acme-challenge/ , Сторона le идет по ссылке и всегда попадает на этот токен.
Дальше дело техники, удобным вам способом перетащить сертификаты на хост1 и рестаратануть там nginx или других демонов чтобы они подцепили сертификаты.
Сделать это можно прям через хуки бота certbot ,
Скажем такая схема:
-он обновил успешно сертификаты
-сработал post-hook который дернул ваш скрипт.
-в скрипте простенькие команды чтобы перекинуть по scp сертификаты, и после по ssh дать команду на рестарт нужных демонов на хосте1.
-опционально помахать хвостиком и через телеграм отправить админу чтобы спал спокойно, можно еще и с логом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
У Let`s Encrypt существует способ подтверждения и не связанный с раскладыванием файликов - например, с помощью TXT-записей. В вашем случае, на мой взгляд, это наиболее подходящий вариант.
Ответ написан
Keffer
@Keffer
ICANN
Лучшее решение - не травмировать себе голову этой убогой бесплатной байдой а купить сертификат нормальный и указать руками нужные хосты и имена.
Ответ написан
Infra_HDC
@Infra_HDC
R2AMO
Для nginx есть плагин, делающий всю низкоуровневую работу по обновлению SSL-сертификатов Letsencrypt за вас. Разве нет?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы