Сегодня мы погрузимся в важнейшую тему — настройку HTTPS в Nginx. Если ваш сайт до сих пор работает по протоколу HTTP, пора это исправить.

Зачем нужен HTTPS?

Всё просто:

  • Шифрование данных. Никто не сможет перехватить информацию между сервером и клиентом.
  • Доверие пользователей. Браузеры любят HTTPS и предупреждают, если его нет.
  • Поисковая оптимизация. Google лучше ранжирует сайты с HTTPS.

Что такое SSL и TLS?

SSL (Secure Sockets Layer) – устаревший, но всё ещё часто используемый термин.

TLS (Transport Layer Security) – его современный и безопасный преемник.

Когда говорят «SSL-сертификат», обычно имеют в виду TLS. Это цифровой документ, который подтверждает, что ваш сайт – это действительно ваш сайт.

Шаг 1: Устанавливаем Certbot

Для получения бесплатного SSL-сертификата от Let’s Encrypt используется утилита Certbot. Установим её:

На Ubuntu

sudo apt update  
sudo apt install certbot python3-certbot-nginx

На CentOS

sudo yum install epel-release  
sudo yum install certbot python3-certbot-nginx

Если вы используете другую ОС, загляните на сайт Certbot — там есть инструкции для всех платформ.

Шаг 2: Получаем SSL-сертификат

Certbot автоматизирует процесс получения сертификата. Выполните команду:

sudo certbot --nginx -d mysite.local -d www.mysite.local

Здесь:

  • -d mysite.local – доменное имя сайта. Замените на своё.
  • -d www.mysite.local – второй домен, если ваш сайт доступен и с www, и без.

Certbot проверит, что вы владеете доменом, и автоматически настроит Nginx для использования сертификата.

Шаг 3: Проверяем настройки

После завершения Certbot обновляет конфигурацию Nginx. Откройте файл, чтобы увидеть изменения:

server {  
    listen 443 ssl;  
    server_name mysite.local www.mysite.local;  

    ssl_certificate /etc/letsencrypt/live/mysite.local/fullchain.pem;  
    ssl_certificate_key /etc/letsencrypt/live/mysite.local/privkey.pem;  

    ssl_protocols TLSv1.2 TLSv1.3;  
    ssl_ciphers HIGH:!aNULL:!MD5;  

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

Перезапустите Nginx:

sudo systemctl reload nginx

Откройте в браузере https://mysite.local. Если всё сделано правильно, вы увидите зелёный замок рядом с адресом.

Шаг 4: Перенаправляем HTTP на HTTPS

Чтобы все пользователи автоматически переходили на HTTPS, добавьте редирект в конфигурацию Nginx:

server {  
    listen 80;  
    server_name mysite.local www.mysite.local;  

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

Шаг 5: Настраиваем автоматическое обновление сертификатов

Сертификаты Let’s Encrypt действуют всего 90 дней. Certbot сам обновляет их, но нужно настроить автоматическое выполнение задачи.

Проверьте обновление вручную:

sudo certbot renew --dry-run

Добавьте задачу в cron:

sudo crontab -e

Добавьте строку:

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

Шаг 6: Дополнительные настройки безопасности

HTTP Strict Transport Security (HSTS)

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Отключаем старые шифры

ssl_prefer_server_ciphers on;  
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Создайте файл dhparam.pem:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Шаг 7: Тестируем HTTPS

Проверьте сайт в браузере. Если всё сделано правильно, он должен открываться только по HTTPS.

Используйте онлайн-сервисы, чтобы проверить настройки безопасности:

  • SSL Labs
  • Why No Padlock

Задание для самостоятельной практики

  1. Получите сертификат Let’s Encrypt для своего сайта.
  2. Настройте редирект с HTTP на HTTPS.
  3. Проверьте сайт через SSL Labs и исправьте замечания.
  4. Добавьте HSTS для максимальной безопасности.

Теперь ваш сайт не только быстрый, но и защищённый. Поздравляю, вы сделали огромный шаг вперёд! В следующей статье мы поговорим о балансировке нагрузки в Nginx.