Имею вопрос относительно модуля http_acme в Angie, который обеспечивает автоматическое получение сертификатов от Let’s Encrypt.
Каким образом можно узнать, в какую конкретную директорию этот модуль предоставляет доступ для прохождения проверки? Эта информация необходима для организации редиректа с порта 80 на порт 443 для всех путей, исключая директорию .well-known.
Где можно обнаружить соответствующий параметр или настройку, отвечающую за это? В описании модуля acme и инструкции по сборке информации по этому вопросу не нашел.
Модуль acme перехватывает запрос к /.well-known/acme-challenge/TOKEN ещё на этапе после чтения заголовков, но до выбора виртуального сервера и обрабатывает его, если TOKEN совпадает с ожидаемым для конкретного CSR запроса сертификата. Ни в какую директорию он при этом доступа не предоставляет, запрос обрабатывается внутри самого модуля. Всё это происходит ещё до обработки каких-либо rewrite и location директив.
Таким образом, никакого влияния модуль acme на вашу конфигурацию оказывать не должен и редирект может выглядеть так:
server {
listen 80;
return 301 https://$host$request_uri;
}
Единственное требование - это чтобы был хотя бы один блок server в конфигурации, слушающий на 80 порту.
Если Angie стоит за каким-то другим прокси, то нужно убедиться, что соответствующий запрос дойдет до самого Angie с модулем. Провайдер ACME делает HTTP-запросы вида /.well-known/acme-challenge/TOKEN на 80-ый порт по IP-адресам, в которые резолвятся домены из CSR запроса на сертификат.
Отдельно отмечу, что в документации есть пример конфигурации сервера на 80-ом порту на случай, если кроме ACME-проверки вы не хотите больше никакие запросы обрабатывать на 80-ом порту:
server {
listen 80;
return 444; # Нет ответа, соединение закрыто
}
In that case I find the documentations a bit confusing, where it states
It makes it sound very much like I have to do something, but not clear what. So I go and read about challenges and then think I have to figure out a way to put the .well-known file in place.
If it all happens automatically, then I must have configured something wrong. I get the key, and account files, but the certificate files is blank.
Would the logs contain any information that might tell me where I am going wrong?
Or, are there any troubleshooting steps I can take to see why I do not get a certificate?
Thanks for pointing that. We will improve the documentation soon.
Most likely something is wrong with accessing the ACME server directory (DNS resolution issue, no network route, or sometimes Let’s Encrypt servers are down). You’ll find the reason in error logs.
Definitely we should also add a troubleshooting section into the docs.