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

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

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


 
-----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.