Введение
Настройка HTTPS необходима для защиты данных между сервером и клиентами. SSL/TLS шифрует трафик, что повышает доверие пользователей и улучшает SEO. В этом руководстве мы настроим SSL на Nginx с использованием самоподписанного сертификата (или реального, если он у вас есть). После выполнения шагов у вас будет значок замка в браузере и весь трафик будет перенаправляться на защищённый порт 443.
Требования
- Сервер на Ubuntu 22.04 или Debian 11 (либо любая дистрибутива, где установлен Nginx).
- Nginx версии 1.20 или выше.
- Права root для изменения конфигурационных файлов.
- Установленный инструмент OpenSSL (
openssl version). - Базовое знание работы с консолью.
Пошаговая инструкция
Шаг 1: Установите Nginx и проверьте версию
Убедитесь, что Nginx уже установлен. Если нет, выполните:
apt update && apt install -y nginx
Проверьте версию и статус сервиса:
nginx -v
systemctl status nginx
Шаг 2: Создайте приватный ключ и CSR
Создайте каталог для SSL-файлов (если он ещё не существует) и сгенерируйте приватный ключ:
mkdir -p /etc/nginx/ssl
openssl genpkey -algorithm RSA -out /etc/nginx/ssl/private.key -pkeyopt rsa_keygen_bits:2048
Создайте файл запроса на сертификат (CSR):
openssl req -new -key /etc/nginx/ssl/private.key -out /etc/nginx/ssl/csr.pem
При выполнении команды вам будет предложено ввести информацию о сертификате. Для самоподписанного сертификата вы можете оставить поля пустыми, кроме Common Name (FQDN вашего сайта).
Шаг 3: Создайте самоподписанный сертификат (или загрузите реальный)
Создайте самоподписанный сертификат сроком на 1 год:
openssl x509 -req -days 365 -in /etc/nginx/ssl/csr.pem -signkey /etc/nginx/ssl/private.key -out /etc/nginx/ssl/certificate.pem
Если у вас уже есть реальный сертификат, скопируйте certificate.pem и ca_bundle.pem (или fullchain.pem) в папку /etc/nginx/ssl/ с теми же именами.
Шаг 4: Настройте сервер Nginx для использования SSL
Откройте конфигурационный файл сайта. Чаще всего это /etc/nginx/sites-available/default. Добавьте/измените блок listen и укажите пути к сертификату и ключу:
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/nginx/ssl/certificate.pem;
ssl_certificate_key /etc/nginx/ssl/private.key;
# Дополнительные настройки SSL (рекомендуемые)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Основная конфигурация сайта
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Добавьте блок для перенаправления HTTP на HTTPS (можно оставить в том же файле):
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
Сохраните изменения в файле.
Шаг 5: Включите перенаправление с HTTP на HTTPS и перезапустите Nginx
Проверьте корректность конфигурации:
nginx -t
Если ошибок нет, перезапустите Nginx:
systemctl reload nginx
Проверка результата
- Откройте браузер и перейдите по адресу
https://your-domain.com. - Убедитесь, что отображается значок замка (часто слева от адреса).
- Выполните команду для проверки SSL:
curl -I https://your-domain.com
Ожидаемые заголовки:
HTTP/2 200
content-type: text/html
strict-transport-security: max-age=31536000
Если перенаправление работает, запрос к http://your-domain.com будет автоматически перенаправлен на HTTPS.
Возможные проблемы
nginx: [emerg] getrlimit(RLIMIT_OPENFILES): no such file or directory– отсутствует директория/etc/nginx/ssl. Убедитесь, что она существует перед генерацией ключа.SSL certificate problem: self signed certificate– браузер не доверяет самоподписанному сертификату. Используйте его только для тестирования; для продакшена приобретите сертификат от доверенного CA.404 Not Foundпосле перенаправления – проверьте, чтоrootиindexсоответствуют реальному расположению файлов сайта.nginx: configuration file /etc/nginx/nginx.conf syntax is okноservice nginx reloadвсё равно не работает – возможно, есть опечатка в конфигурации сервера. Проверьте синтаксис черезnginx -tи сравните с образцом.
Если после этих действий SSL всё ещё не работает, проверьте логи Nginx (journalctl -u nginx -f) на предмет ошибок.