Чтобы настроить SSL-сертификат на Nginx, укажите пути к сертификату сайта и приватному ключу в конфигурации веб-сервера. Затем включите HTTPS, настройте перенаправление с HTTP на HTTPS и проверьте конфигурацию перед применением изменений.
Сертификат можно настроить вручную или с помощью Certbot. Ручной способ подходит для коммерческих сертификатов Рег.ру и других центров сертификации. Certbot позволяет получить бесплатный сертификат Let's Encrypt, настроить Nginx и автоматизировать продление.
Что понадобится для настройки SSL-сертификата
Перед началом проверьте, что у вас есть:
- доступ к серверу по SSH с правами
rootилиsudo; - установленный и запущенный Nginx;
- домен, который указывает на IP-адрес сервера;
- открытые порты 80 и 443, если сервер должен принимать HTTP- и HTTPS-запросы;
- SSL-сертификат, приватный ключ и промежуточные сертификаты центра сертификации.
В примерах используется домен example.com. Замените его на свой домен. Пути к файлам и конфигурации могут отличаться в зависимости от операционной системы и настроек сервера.
Как настроить SSL-сертификат вручную
Этот способ подходит, если вы уже получили SSL-сертификат от Рег.ру или другого центра сертификации.
Шаг 1. Получите сертификат и подготовьте файлы
Закажите SSL-сертификат и активируйте его. В зависимости от типа сертификата потребуется подтвердить владение доменом или пройти проверку организации.
Если сертификат еще не активирован:
После выпуска скачайте сертификат и необходимые промежуточные сертификаты. Подробнее о файлах для установки рассказали в статье Где взять данные для установки SSL-сертификата.
Для установки также понадобится приватный ключ, который соответствует сертификату. Если вы создавали запрос на выпуск сертификата (CSR) на сервере, используйте сохраненный приватный ключ. Повторно создавать его не нужно.
Шаг 2. Подготовьте цепочку сертификатов
Nginx должен передавать браузеру сертификат сайта и необходимые промежуточные сертификаты. Обычно корневой сертификат добавлять не нужно.
Если центр сертификации выдал сертификат сайта и промежуточный сертификат отдельными файлами, объедините их в один файл. Сначала укажите сертификат сайта, затем промежуточные сертификаты в порядке, который рекомендует центр сертификации. Например:
cat example.com.crt intermediate.crt > fullchain.crt
Если центр сертификации предоставил готовый файл полной цепочки, используйте его. Названия файлов могут отличаться.
Шаг 3. Разместите сертификат и приватный ключ на сервере
Создайте отдельный каталог для файлов сертификата:
sudo mkdir -p /etc/nginx/ssl/example.com
Загрузите в каталог файл полной цепочки fullchain.crt и приватный ключ example.com.key. В этом примере файлы находятся по пути /etc/nginx/ssl/example.com/.
Ограничьте доступ к приватному ключу:
sudo chown root:root /etc/nginx/ssl/example.com/example.com.key
sudo chmod 600 /etc/nginx/ssl/example.com/example.com.key
Не размещайте приватный ключ в каталоге сайта, доступном через браузер. Убедитесь, что процесс Nginx может читать файл ключа. В стандартной конфигурации главный процесс Nginx работает с правами root, но в нестандартных окружениях права доступа могут отличаться.
Шаг 4. Настройте HTTPS в конфигурации Nginx
Найдите конфигурационный файл сайта. В зависимости от системы он может находиться в /etc/nginx/sites-available/, /etc/nginx/conf.d/ или в другом каталоге, который подключен в основной конфигурации Nginx.
В блоке server, который обрабатывает HTTPS-запросы, укажите сертификат, приватный ключ и поддерживаемые версии TLS:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
root /var/www/example.com;
index index.html index.htm;
}
Замените домены и путь к каталогу сайта на свои значения. Если в существующем блоке server уже настроены root, index, location и другие директивы, сохраните их. Не заменяйте всю конфигурацию этим примером без проверки.
Директива ssl_certificate указывает путь к сертификату и цепочке, а ssl_certificate_key — к приватному ключу. Параметр ssl_protocols разрешает TLS 1.2 и TLS 1.3. Поддержка TLS 1.3 зависит от версии Nginx и библиотеки OpenSSL, с которой он собран.
Шаг 5. Настройте перенаправление с HTTP на HTTPS
Чтобы посетители автоматически переходили на защищенную версию сайта, добавьте отдельный блок для HTTP-запросов:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://hostrequest_uri;
}
Код 301 обозначает постоянное перенаправление. Переменная $host сохраняет имя хоста, а $request_uri — путь и параметры запроса. Убедитесь, что сертификат действителен для всех доменов, указанных в server_name.
Параметр listen 80 сам по себе не включает перенаправление. Для этого нужна директива return или другое подходящее правило.
Шаг 6. Проверьте конфигурацию и перезагрузите Nginx
Перед применением изменений проверьте конфигурацию:
sudo nginx -t
Если команда сообщает об успешной проверке, примените изменения без полного перезапуска сервера:
sudo systemctl reload nginx
Если проверка завершилась ошибкой, не применяйте изменения. Проверьте пути к сертификату и ключу, права доступа и синтаксис конфигурации. Для дополнительной диагностики используйте:
sudo systemctl status nginx
Команды systemctl подходят для систем с systemd. В других окружениях способ управления службой может отличаться.
Шаг 7. Проверьте работу HTTPS
Откройте сайт в браузере по адресу https://example.com. Убедитесь, что браузер не сообщает об ошибке сертификата, а страницы и ресурсы загружаются без предупреждений о смешанном содержимом.
Проверьте перенаправление с HTTP:
curl -I -L http://example.com
Параметр -I запрашивает только HTTP-заголовки, а -L позволяет пройти по цепочке перенаправлений. Проверьте, что запрос переходит на HTTPS.
Затем проверьте HTTPS-ответ:
curl -I https://example.com
При необходимости отдельно проверьте домен с префиксом www, например https://www.example.com. Убедитесь, что сертификат действителен для каждого используемого доменного имени.
Как настроить SSL-сертификат на Nginx с помощью Certbot
Certbot помогает получить бесплатный сертификат Let's Encrypt и настроить Nginx автоматически. Этот способ подходит, если домен указывает на сервер, а сам сервер доступен из интернета.
-
1
Откройте инструкцию по установке Certbot для своей системы и Nginx. Выполните предложенные команды установки.
-
2
Укажите домены в команде:
sudo certbot --nginx -d example.com -d www.example.comCertbot проверит домен, получит сертификат и сможет изменить конфигурацию Nginx. Для проверки домена через HTTP обычно нужен доступ к серверу по порту 80. Перед запуском сохраните резервную копию конфигурации.
-
3
Выполните команды:
sudo nginx -t sudo certbot certificatesПервая команда проверяет конфигурацию Nginx, вторая показывает сведения о сертификатах, которыми управляет Certbot.
-
4
Запустите тестовое продление:
sudo certbot renew --dry-runКоманда проверяет сценарий продления и не заменяет действующий сертификат. Убедитесь, что в системе настроен автоматический запуск Certbot. В зависимости от способа установки для этого может использоваться системный таймер или задание планировщика.
Проверить системные таймеры можно командой:
systemctl list-timersНаличие таймера зависит от способа установки Certbot. Если автоматический запуск не настроен, продление не будет происходить самостоятельно. Не создавайте дополнительное задание, пока не проверите существующий механизм запуска.
-
5
После выпуска сертификата проверьте перенаправление на HTTPS и работу сайта в браузере.
Чем отличаются ручная настройка и Certbot
Ручная настройка дает полный контроль над конфигурацией Nginx и подходит для уже выпущенных коммерческих сертификатов. Certbot упрощает получение сертификата Let's Encrypt и позволяет автоматизировать его продление. Основные различия между способами приведены в таблице.
Частые вопросы
Какие версии TLS включить в Nginx?
Нужно ли добавлять корневой сертификат в цепочку?
Почему Nginx не запускается после настройки SSL?
sudo nginx -t, чтобы найти ошибку, и проверьте журналы Nginx.
Как проверить автоматическое продление сертификата?
sudo certbot renew --dry-run. Команда проверит сценарий продления. Также убедитесь, что в системе настроен таймер или задание, которое запускает Certbot автоматически. Коммерческие сертификаты нужно продлевать по правилам выдавшего их центра сертификации.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊