Получение сертификата на почтовый(или любой другой) домен за Nginx reverse proxy

Linux admin

Обсуждение тут


🔹 ШАГ 0. Проверка DNS (обязательно)

dig +short mail.ru

👉 ДОЛЖЕН возвращаться публичный IP nginx reverse proxy.
Если не так — сначала исправь DNS.


🔹 ШАГ 1. Подготовка каталога для ACME

mkdir -p /var/www/mail.ru
chown -R www-data:www-data /var/www/mail.ru
chmod -R 755 /var/www/mail.ru

🔹 ШАГ 2. Конфигурация nginx (порт 80)

Создай или отредактируй конфиг на reverse proxy:

server {
    listen 80;
    server_name mail.ru;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
        default_type "text/plain";
        allow all;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

Проверь и перезагрузи nginx:

nginx -t && systemctl reload nginx

🔹 ШАГ 3. Проверка вручную (ОЧЕНЬ ВАЖНО)

echo "ok" > /var/www/certbot/test.txt
curl http://mail.ru/.well-known/acme-challenge/test.txt

👉 ДОЛЖНО вернуть:

ok

❗ Если не работает — certbot тоже не сработает.


🔹 ШАГ 4. Получение сертификата

certbot certonly \
  --webroot \
  -w /var/www/mail.ru \
  -d mail.ru

Если всё ок — увидишь:

Congratulations! Your certificate and chain have been saved at:
 /etc/letsencrypt/live/mail.ru/

🔹 ШАГ 5. Подключение сертификата в nginx (пример)

ssl_certificate     /etc/letsencrypt/live/mail.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.ru/privkey.pem;

🔹 ШАГ 6. Автообновление

Certbot уже добавил systemd-timer.

Проверь:

certbot renew --dry-run

🔹 ШАГ 7. (Опционально) Если сертификат нужен почтовому серверу

Если почтовый сервер на другой машине, добавь deploy-hook:

cat << 'EOF' > /etc/letsencrypt/renewal-hooks/deploy/mail.sh
#!/bin/bash
scp -r /etc/letsencrypt/live/mail.ru mailserver:/etc/ssl/mail/
ssh mailserver "systemctl reload postfix dovecot"
EOF

chmod +x /etc/letsencrypt/renewal-hooks/deploy/mail.sh