Салют, $USER!
Эй, кстати, наш Telegram уже ждёт именно тебя. Забегай!
Это должна была быть первая статья в моем блоге. И решил написать ее о том, как использовать модуль ngx_http_acme для nginx. 15 августа 2025 года появилась новость о том, что компания F5 выпустила модуль для nginx, который позволяет упростить и автоматизировать работу с ssl сертификатами, а в частности с сертификатами letsencrypt. Это дает то, что мы теперь можем выпускать сертификаты прямо в конфигурационных файлах nginx и не надо ставить certbot, и другие решение для выпуска сертификатов.
Ограничения
- Поддерживается только HTTP-01 challenge (требует 80 порт).
- Нет поддержки TLS-ALPN и DNS-01 (в том числе для wildcard-сертификатов) — пока в планах.
- Регулярные выражения и подстановки в server_name недоступны.
Ну что, приступим к установке.
Установка.
Модуль ngx_http_acme пока еще нет в репозиториях дистрибутивов, но он есть в opensorce репозитории самого nginx в ветки stable, мы его и подключим.
Вся установка и настройка будут выполняться в дистрибутиве Ubuntu-24.04 от пользователя root. [мне так проще]
Подключаем репозиторий.
- По классике обновим кеш пакетов.
- Установим недостающие пакеты.
1
| apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
|
1
2
| curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
|
1
| gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
|
- Подключаем сам репозиторий, я выбрал stable ветку.
1
2
3
| echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
|
- Ну и закрепим репозиторий.
Это нужно для того, чтобы nginx установился из репозитория самого nginx, а не системного репозитория.
1
2
| echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
|
- Или возпользуемся скриптом для ubuntu/debian.
1
| curl https://code.1xtier.ru/floki/scripts/raw/branch/main/service/nginx/ins_repo-nginx.sh | bash
|
- Обновим кеш, чтобы репозиторий у нас подтянулся.
- Устанавливаем сам nginx и модуль ngx_http_acme.
1
| apt install nginx nginx-module-acme
|
Настройка модуля ngx_http_acme.
- Проверим что модуль установился.
1
2
3
| ls /etc/nginx/modules | grep acme
ngx_http_acme_module-debug.so
ngx_http_acme_module.so
|
- Подключаем модуль acme в главном конфиге nginx.
Модуль подключаем до блока http и блока events.
1
| load_module modules/ngx_http_acme_module.so;
|
Вверху всего конфигурационного файла вставляем следующее.
1
2
3
4
5
6
7
8
9
| resolver 8.8.8.8;
acme_issuer letsencrypt {
uri https://acme-v02.api.letsencrypt.org/directory;
contact тут ваш email
state_path /var/cache/nginx/acme-letsencrypt;
accept_terms_of_service;
}
acme_shared_zone zone=ngx_acme_shared:1M;
|
- Далее идем в блок server настроек ssl подключения и пропишем следующее:
1
2
3
4
5
6
7
8
9
10
11
12
| listen 443 ssl;
server_name domain.ru
acme_certificate letsencrypt;
ssl_certificate $acme_certificate;
ssl_certificate_key $acme_certificate_key;
ssl_certificate_cache max=2;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
далее настраивате под свои нужны блоки nginx
|
После настройки сохраняем и выходим и проверяем конфигураю nginx -t и перезагружаем nginx.
1
| systemctl restart nginx
|
Немного подождем и проверяем, получил ли у нас nginx ssl сертификат:
- Либо идем в браузер и по https://.
- Посмотрим содержимое директории ls -la /var/cache/nginx/acme-letsencrypt. Как видим сертификаты подтянулись.
1
| 1xtier.ru-a475552253811764.crt 1xtier.ru-a475552253811764.key account.key account.url
|
PS.
Если нужно получить SSL-сертификат для поддомена или другого домена на том же сервере, это будет немного проще. Мы просто в настройках блока server в разделе https указываем необходимые данные.
1
2
3
4
5
6
7
8
9
10
11
12
13
| listen 443 ssl;
server_name domain.ru
server_name code.1xtier.ru;
acme_certificate letsencrypt;
ssl_certificate $acme_certificate;
ssl_certificate_key $acme_certificate_key;
ssl_certificate_cache max=2;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
|
Без блока настройки acme_issuer letsencrypt проверяем конфигурацию и перезагружаем nginx, проверяем сертификат:
- Либо идем в браузер и по https://
- посмотрим содержимое директории ls -la /var/cache/nginx/acme-letsencrypt и видим два сертификата для нашего поддомена.
1
| code.1xtier.ru-df7cfb7ec5461350.crt code.1xtier.ru-df7cfb7ec5461350.key
|