Настройка ACME для получения сертификатов в Angie (+Maddy)
Angie⌗
Этот мануал написан на основе другого мануала.
Только я Docker’ом не пользуюсь, только bare-metal, только хардкор.
Для тех кто в танке - Angie это форк nginx. Историю появления ищите сами.
Што ш, начнём.
Для начала, в конфиге Angie в конце блока http добавляем следующие строчки:
acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
resolver 192.168.50.185;
Где 192.168.50.185 это мой DNS сервер. Вы ставьте свой, например Quad9, 9.9.9.9.
То есть, по итогу у нас должно получиться вот так:
http {
# здесь будут другие параметры
acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
resolver 192.168.50.185;
}
Вместо того, чтобы каждый раз в новых конфигах не прописывать необходимые строки для получения сертификата, я сделал мини-конфиг, который я добавляю одной строчкой.
Сам конфиг должен располагаться в /etc/angie/includes, я его назвал ssl.conf
listen 443 ssl;
acme letsencrypt;
ssl_certificate $acme_cert_letsencrypt;
ssl_certificate_key $acme_cert_key_letsencrypt;
Помимо этого я сделал ещё один мини-конфиг, чтобы Angie принудительно HTTP запросы переводил в HTTPS, назвал 301.conf
return 301 https://$host$request_uri;
И эти мини-конфиги я добавляю в конфиг сайта строчкой
include includes/ssl.conf # ну или другое имя после includes/
Среднестатистический конфиг Angie для сайта будет выглядеть приблизительно так:
(как пример взял конфиг от Fluffychat)
server {
server_name ffchat.sadium.cyou;
include includes/301.conf;
}
server {
server_name ffchat.sadium.cyou;
location / {
proxy_pass http://localhost:9199;
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_set_header X-Forwarded-Proto $scheme;
}
location /admin/ {
proxy_pass http://localhost:9198/;
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_set_header X-Forwarded-Proto $scheme;
}
location /invite/ {
proxy_pass http://localhost:5055/;
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_set_header X-Forwarded-Proto $scheme;
}
include includes/main_errors.conf;
include includes/ssl.conf;
}
Проверяем, что всё ок командой
angie -t
angie: the configuration file /etc/angie/angie.conf syntax is ok
angie: configuration file /etc/angie/angie.conf test is successful
А если не ок, то чиним, пока не избавимся от ошибок 🙃
Перезагружайте страничку с некоторым интервалом, сначала будет ругаться, но через полминуты где-то сертификат таки получит.
Сертификаты будут лежать по пути /var/lib/angie/acme/letsencrypt.
Maddy⌗
Поскольку у меня есть почтовый сервер на базе Maddy, в его конфиге нужно заменить строчку
tls file /etc/letsencrypt/live/$(primary_domain)/fullchain.pem /etc/letsencrypt/live/$(primary_domain)/privkey.pem
на
tls file /var/lib/angie/acme/letsencrypt/certificate.pem /var/lib/angie/acme/letsencrypt/private.key
и дать Maddy доступ к сертификатам
sudo setfacl -R -m u:maddy:rX /var/lib/angie/acme/letsencrypt/certificate.pem
sudo setfacl -R -m u:maddy:rX /var/lib/angie/acme/letsencrypt/private.key
и всё должно заработать.