Сегодня мы погрузимся в важнейшую тему — настройку 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
Шаг 2: Получаем SSL-сертификат
Certbot автоматизирует процесс получения сертификата. Выполните команду:
sudo certbot --nginx -d mysite.local -d www.mysite.local
Здесь:
- -d mysite.local – доменное имя сайта. Замените на своё.
- -d www.mysite.local – второй домен, если ваш сайт доступен и с www, и без.
Шаг 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;
}
}
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
Задание для самостоятельной практики
- Получите сертификат Let’s Encrypt для своего сайта.
- Настройте редирект с HTTP на HTTPS.
- Проверьте сайт через SSL Labs и исправьте замечания.
- Добавьте HSTS для максимальной безопасности.
Теперь ваш сайт не только быстрый, но и защищённый. Поздравляю, вы сделали огромный шаг вперёд! В следующей статье мы поговорим о балансировке нагрузки в Nginx.