Настройка SSL в Nginx с Lets Encrypt

Настройка SSL в Nginx с Lets Encrypt

Nginx входит в число самых востребованных сервисов, который известен хорошей производительностью при существенных нагрузках. Все больше и больше сайтов поддерживают протокол HTTPS, а ведущие браузерные разработчики, включая Google и Mozilla, активно поощряют владельцев сайтов, использующих данный защищенный протокол.

Сейчас переход на него — несложная задача, поскольку все топовые серверы включают поддержку SSL, а выпустить сертификат можно даже бесплатно. В данной статье рассмотрим процесс настройки SSL в Nginx с использованием сертификата Let's Encrypt.

Настройка SSL в Nginx

Предполагается, что сервер Nginx предустановлен. Далее переходим к процессу создания виртуального хоста и установки необходимых компонентов для выпуска сертификатов и настройки SSL-соединения.

Чтобы получить сертификат, необходим сервер, привязанный к определенному домену. Сертификационному центру нужно убедиться, что доменное имя и сервер принадлежат именно вам. В качестве примера продемонстрируем получение сертификатов для доменов yoursite.ru и www.yoursite.ru. Поэтому необходимо, чтобы DNS-записи обоих доменов указывали на ваш сервер.

Этап 1. Настраиваем виртуальный хост

Если виртуальный хост для сайта с протоколом HTTP ранее не был настроен, необходимо выполнить эту операцию, в противном случае установка SSL-сертификата в Nginx будет невозможной.

sudo nano /etc/nginx/conf.d/yoursite.ru.conf

Для домена yoursite.ru несложная конфигурация виртуального хоста может выглядеть следующим образом:

	
server {
	listen 80;
	server_name yoursite.ru www.yoursite.ru;
	access_log /var/log/nginx/yoursite-ru.access.log main;
	root /var/www/yoursite.ru/public_html/;
	index index.html index.htm;
	location / {
		try_files $uri $uri/ =404;
	}
}
	

Далее проверяется конфигурация Nginx:

nginx -t

Если все верно, требуется перезапустить сервер:

sudo systemctl restart nginx

Должна существовать директория /var/www/yoursite.ru/public_html/, в которую необходимо поместить индексный файл с любым содержимым:

	
sudo mkdir -p /var/www/yoursite.ru/public_html/
sudo nano /var/www/yoursite.ru/public_html/index.html
Сайт работает!
	

Далее убедитесь, что все функционирует, как надо. Для это используют браузер или утилиты curl:

	
curl yoursite.ru
Сайт работает!
	

Этап 2. Инсталляция Certbot

Чтобы получить сертификаты Let's Encrypt официально рекомендуют применение клиента Certbot. Программу устанавливают с официальных репозиториев:

sudo apt install certbot certbot-python-nginx

Установка программы и добавление модуля для работы с Nginx — два отдельных пакета. После инсталляции обоих модуль становится доступным для использования в Nginx.

Этап 3. Выдача сертификата

Автоустановка сертификата не планируется, вместо этого просто генерируем его с использованием данной утилиты и затем вручную добавляем в Nginx. Чтобы сгенерировать и подписать сертификат, воспользуйтесь следующей командой:

sudo certbot certonly --nginx -d yoursite.ru -d www.yoursite.ru

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

Затем SSL-сертификат будет создан и вам поступит сообщение с подтверждением выпуска сертификата, а также информацией о сохранении файлов сертификата SSL Nginx в каталоге /etc/letsencrypt/live/yoursite.ru/. Теперь переходим к настройке SSL в Nginx.

Этап 4. Настройка виртуального хоста для SSL

В папке /etc/letsencrypt/live/yoursite.ru/ находятся следующие файлы сертификатов:

  1. cert.pem: файл сертификата (использовать не будем);
  2. chain.pem: файл цепочки сертификата, которые сейчас не пригодятся;
  3. privkey.pem: приватный ключ сертификата, который необходимо указать в параметре ssl_certificate_key;
  4. fullchain.pem: данный файл содержит объединенное содержимое cert.pem и chain.pem и должен быть указан в параметре ssl_certificate.

Для настройки SSL создается файл виртуального хоста с портом прослушивания 443, а также добавляется целый ряд директив, необходимы для настройки SSL.

	
sudo nano /etc/nginx/conf.d/yoursite.ru-ssl.conf
server {
	listen 443 ssl;
	server_name yoursite.ru www.yoursite.ru;
	access_log /var/log/nginx/yoursite-ru.access.log main;
	root /var/www/yoursite.ru/public_html/;
	index index.html index.htm;
	ssl on;
	ssl_certificate /etc/letsencrypt/live/yoursite.ru/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/yoursite.ru/privkey.pem;
	location / {
		try_files $uri $uri/ =404;
	}
}
	

Когда файл создан, остается только перезапустить Nginx:

sudo systemctl restart nginx

К этому моменту все уже должно работать.

Этап 6. Как проверять

Проверить параметры работы SSL можно с помощью сервиса SSLlabs. Просто перейдите по следующей ссылке в браузере, заменив домен сайта на необходимый:

https://www.ssllabs.com/ssltest/analyze.html?d=yoursite.ru&latest

Этап 7. Обновление сертификата

Одним из недостатков сертификатов от Lets Encrypt является их срок действия, который составляет всего 90 суток. Обновлять их следует за месяц до завершения. Для этой цели предусмотрена особая команда:

certbot renew
Эта команда осуществляет проверку всех установленных в системе сертификатов и перевыпускает те, которые вскоре истекут. Для автоматической настройки перевыпуска сертификатов просто добавьте эту команду в crontab:
	
crontab -e
0 0 * * 1 /usr/bin/certbot renew --renew-hook "systemctl reload nginx" >> /var/log/le-renew.log
	

Команда будет выполняться каждый понедельник в 0:00 и записывать свой вывод в файл /var/log/le-renew.log.

   03.08.2023 18:02:00
Автор статьи:
Гончаров Владимир Сергеевич ©
ЕЩЕ ПО ТЕМЕ

Для настройки редиректа с http на https в Nginx нужно прописать соответствующее правило в файле конфигурации сервера. После редактирования файлов конфигурации, чтобы изменения вступили в силу, сервер каждый раз нужно перезагружать или перезапускать.

18.08.2023 18:17:17

Nginx - это популярный веб-сервер и прокси-сервер, который используется для обслуживания многих веб-сайтов в Интернете. Перезапуск Nginx может быть необходим, чтобы применить изменения в конфигурации, исправить ошибки, или обновить версию Nginx.

18.08.2023 17:55:09

DNS-записи являются одним из самых важных элементов инфраструктуры Интернета. Без них пользователи не смогут получить доступ к веб-ресурсам, почте и другим сервисам. DNS-записи используются для преобразования доменных имен в IP-адреса и наоборот. В этой статье мы рассмотрим основные типы DNS-записей, способы их проверки и настройки в Linux.

31.07.2023 17:11:00

FTP (File Transfer Protocol) - это протокол передачи файлов, который используется для обмена файлами между компьютерами в сети. FTP является одним из наиболее распространенных протоколов передачи файлов в Интернете и используется для загрузки и скачивания файлов с сервера. FTP был разработан в 1971 году и с тех пор был значительно усовершенствован и расширен.

27.07.2023 17:07:00

В Linux существует два типа ссылок на файлы: символические ссылки (symbolic links) и жесткие ссылки (hard links).

25.07.2023 16:47:00