Установка и настройка Certbot (Let's Encrypt) для Nginx на Ubuntu

1. Установка необходимых пакетов

Перед началом убедитесь, что у вас установлен Nginx и обновлены все пакеты:

sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx

Теперь установим Certbot и плагин для Nginx:

sudo apt install -y certbot python3-certbot-nginx

2. Настройка брандмауэра

Разрешите трафик для Nginx и HTTPS:

sudo ufw allow 22
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

3. Создание конфигурации Nginx

Создайте или отредактируйте файл конфигурации Nginx для вашего домена:

sudo nano /etc/nginx/sites-available/example.com

Добавьте следующую конфигурацию:

server {
    listen 80;
    server_name example.com www.example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }

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

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

Активируйте сайт:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Проверьте конфигурацию и перезапустите Nginx:

sudo nginx -t
sudo systemctl restart nginx

4. Получение SSL-сертификата от Let's Encrypt

Запустите команду для автоматической настройки SSL-сертификата с помощью Certbot:

sudo certbot --nginx -d example.com -d www.example.com

Замените example.com на ваш реальный домен.

В процессе вас попросят:

  1. Ввести ваш email.
  2. Принять условия обслуживания Let's Encrypt.
  3. Выбрать перенаправление HTTP в HTTPS (рекомендуется).

После успешной установки сертификата Certbot автоматически обновит конфигурацию Nginx.

5. Проверка SSL-конфигурации

Проверьте, что конфигурация Nginx корректна:

sudo nginx -t

Перезапустите Nginx, чтобы применить изменения:

sudo systemctl restart nginx

6. Автоматическое продление сертификата

Let's Encrypt сертификаты действительны 90 дней. Certbot автоматически настраивает таймер для продления сертификатов. Вы можете проверить его с помощью:

sudo systemctl status certbot.timer

Для тестирования продления сертификата вручную выполните:

sudo certbot renew --dry-run

7. Настройка автоматического продления (если необходимо вручную)

Откройте crontab для редактирования:

sudo crontab -e

Добавьте следующую строку для автоматического продления сертификатов:

0 3 * * * certbot renew --quiet && systemctl reload nginx

Это задание будет выполняться каждый день в 03:00 и продлевать сертификаты при необходимости.

8. Проверка установленного SSL-сертификата

Вы можете проверить SSL-сертификат с помощью команды:

openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates

Либо используйте SSL Labs для более детального анализа.

9. Откат и удаление сертификата (если нужно)

Если вам нужно удалить сертификат, выполните:

sudo certbot delete --cert-name example.com

После удаления обновите конфигурацию Nginx:

sudo systemctl restart nginx

Теперь ваш сервер работает с безопасным HTTPS-соединением, и сертификаты автоматически обновляются! 🚀