Syncweb
Услуги
ПомощьИстории клиентов
О компании
КонтактыБлог

Что вы ищете?

Быстрые переходы

Установка SSL сертификата в NGINX

← Все инструкции
БАЗА ЗНАНИЙ

Для установки сертификата в NGINX нам потребуется два файла, а именно сам сертификат(обычно расширение .crt) и приватный ключ(обычно расширение .key). Иногда ЦС(центр сертификации) может присылать несколько файлов, где часть будет представлять цепочку сертификатов и один файл Ваш приватный ключ.

Если цепочка сертификатов представлена отдельными файлами, то следует объединить их в один по шаблону:

Перед началом

Нужны действующий SSL-сертификат для вашего домена, его приватный ключ, промежуточные сертификаты и доступ к серверу с правами администратора.

Сохраните копию текущего конфига. Если конфигурацией управляет панель хостинга, подключайте SSL через неё: ручные правки могут быть перезаписаны.

Во всех примерах замените example.com своим доменом. Пути к файлам — пример для Linux; используйте пути вашей установки.

01Подготовьте сертификат

Создайте файл цепочки: сначала сертификат вашего домена, затем промежуточные сертификаты в порядке, указанном центром сертификации. Если вам уже выдали готовый fullchain, используйте его.

Терминал · цепочка сертификатов
cat example.com.crt intermediate.crt > fullchain.pem

Приватный ключ остаётся отдельным файлом. Не публикуйте его и не передавайте вместе с сертификатом.

02Разместите файлы

Скопируйте цепочку и ключ в отдельный каталог. Ниже — пример для обычной установки, где главный процесс NGINX запускается от root.

Терминал · файлы и права
sudo install -d -m 755 /etc/nginx/ssl
sudo install -m 644 fullchain.pem /etc/nginx/ssl/example.com.fullchain.pem
sudo install -m 600 example.com.key /etc/nginx/ssl/example.com.key

Ключ должен быть доступен главному процессу NGINX. Если он работает от другого пользователя или в контейнере, настройте владельца и путь для этого окружения.

03Настройте HTTPS

В существующий блок server вашего сайта добавьте или обновите настройки ниже. Сохраните его root, location и настройки приложения.

NGINX · фрагмент server
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;

Это фрагмент, а не готовая конфигурация сайта. Если порт 443 уже настроен, отредактируйте существующие директивы, чтобы избежать дублирования.

04Добавьте перенаправление

В отдельном HTTP-блоке направьте посетителей на HTTPS. Существующие специальные маршруты, например для проверки ACME, при необходимости сохраните отдельно.

NGINX · перенаправление с HTTP
server {
    listen 80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}

Убедитесь, что порт 443 разрешён в сетевых правилах сервера и на стороне площадки.

05Проверьте и примените

Сначала проверьте конфигурацию. Перезагрузка настроек выполнится только при успешной проверке.

Терминал · проверка и применение
sudo nginx -t && sudo nginx -s reload
Если проверка завершилась ошибкой

Не перезапускайте сервер. Исправьте указанную ошибку и повторите проверку.

06Проверьте сайт

Откройте сайт по HTTPS: имя домена и срок сертификата должны быть верными, а браузер — принимать цепочку без предупреждений. Проверьте также переход с HTTP.

Терминал · проверка адресов
curl -I https://example.com
curl -I http://example.com

В ответе HTTP ожидается перенаправление на HTTPS. Сам HTTPS-адрес должен отвечать без ошибки проверки сертификата; код ответа зависит от вашего приложения.

HTTPS настроен

Следите за сроком сертификата. После замены файлов повторите проверку и reload. Эти шаги сами по себе не включают автоматическое продление.

Если что-то пошло не так

NGINX сообщает о несовпадении ключа и сертификата

Используйте приватный ключ, с которым создавался запрос на этот сертификат. Файл ключа от другого выпуска не подойдёт.

Браузер не доверяет сертификату

Проверьте доменное имя, срок действия и полноту цепочки. В fullchain сертификат домена должен стоять перед промежуточными.

Появляется ошибка Permission denied

Проверьте путь, владельца, права доступа и ограничения окружения. Доступ к ключу нужен главному процессу NGINX; открывать его всем пользователям не требуется.

HTTPS-адрес не открывается

Проверьте успешность nginx -t, прослушивание порта 443, сетевые правила и соответствие DNS адресу сервера.

← Все инструкции по VDSНаверх ↑

        
-----BEGIN CERTIFICATE-----
#здесь должен быть Ваш сертификат
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#здесь должен быть промежуточный сертификат
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#здесь должен быть корневой сертификат
-----END CERTIFICATE-----
 

Сохраняем получившийся файл как domain.crt, где domain - имя вашего домена. На самом деле как вы назовёте этот файл не имеет значение, важно содержимое, но для удобства лучше назвать в соответствии с подтверждаемым доменом.

Теперь загружаем два файла (domain.crt и domain.key) на сервер, желательно в директорию /etc/ssl/ или /etc/nginx/ssl/, но не обязательно.

Теперь настроим NGINX. Открываем файл конфигурации и в имеющейся секции server{}, описывающий Ваш домен, изменяем строчку


        
listen 80;
 

на


        
listen 443 ssl http2; # или просто listen 443 ssl;
 
ssl_certificate /etc/ssl/domain.crt;
ssl_certificate_key /etc/ssl/domain.key;
 

Обратите внимание: здесь указан полный путь до файлов с сертификатами и приватным ключом. Если Вы разместили эти файлы в другом месте, то и в этих строчках нужно внести изменение.

Если требуется переадресация с HTTP на HTTPS, то добавим еще одну секцию со следующим содержимым:


        
server {
    if ($host = domain.ru) {
        return 301 https://$host$request_uri;
    }
 
    listen 80;
    server_name domain.ru;
    return 404;
 
}
 

Соответственно заменяем domain.ru на адрес вашего сайта.

Теперь проверяем внесенные изменения:


$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Если здесь не вышло никаких проблем - значит мы не допустили никаких синтаксических ошибок(логические ошибки тут не проверяются). Перезапускаем NGINX:


$ sudo systemctl restart nginx

Теперь проверяем свой сайт, заходим на него и слева от строки ввода в браузере должен быть замочек.

В дальнейшем достаточно только прописывать путь к новым сертификатам и ОБЯЗАТЕЛЬНО перезагружать NGINX.

Не нашли ответов в статье? Попробуйте поиск!