На главную

61c46507-12c7-4300-a301-bd8bc30c7c19 Инструкции для серверов

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

В статье рассмотрим, как получить и установить бесплатный SSL Let's Encrypt для Nginx в Ubuntu. Установку и настройку Nginx на Ubuntu мы описывали в отдельной статье.

Шаг 1. Установка Certbot

Чтобы получить сертификат, воспользуемся Certbot. Установим его на сервер:

sudo apt install certbot python3-certbot-nginx

Шаг 2. Настройка конфигурации Nginx

Certbot будет обращаться к определенному виртуальному хосту, ориентируясь на директиву server_name — в ней должен быть указан домен вашего сайта.

Мы писали о настройке виртуальных хостов Nginx здесь. Если настройка была выполнена по нашей инструкции, у вас будет создан виртуальный хост /etc/nginx/sites-available/имя_сайта (в нашем примере — /etc/nginx/sites-available/testsite.dev). 

Проверим, открыв файл в редакторе:

sudo nano /etc/nginx/sites-available/testsite.dev

Найдем в нем директиву server_name и убедимся, что в ней указан наш домен:

...
server_name testsite.dev www.testsite.dev;
...

Если необходимо, внесите правки в файл и сохраните изменения.

После проверьте конфигурацию Nginx на наличие ошибок:

sudo nginx -t

Если все в порядке, перезагрузите веб-сервер:

sudo systemctl reload nginx

Шаг 3. Настройка брандмауэра

Далее нам нужно разрешить трафик HTTPS. 

Проверим, какие параметры ufw установлены сейчас:

sudo ufw status

Если разрешен только HTTP-трафик, вывод будет примерно следующим:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Внесем изменения, а именно разрешим HTTPS-трафик. Для этого выполним:

sudo ufw allow 'Nginx Full'

Профиль Nginx Full разрешает оба типа трафика: и HTTPS, на порту 443, и HTTP, на порту 80. 

Разрешать отдельно HTTP-трафик нам больше не требуется, поэтому удалим ненужную директиву:

sudo ufw delete allow 'Nginx HTTP'

Снова проверим настройки брандмауэра: 

sudo ufw status

Если все в порядке, вы увидите, что весь трафик (Nginx Full) разрешен:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Шаг 4. Получение SSL

Запустим Certbot с плагином Nginx, чтобы обновить конфигурацию Nginx:

sudo certbot --nginx -d testsite.dev -d www.testsite.dev

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

Далее выберите, каким образом нужно настроить HTTPS: 

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

После того, как все будет сделано, система сообщит, что процедура завершена, и укажет, где размещены сертификаты:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/testsite.dev/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/testsite.dev/privkey.pem
   Your cert will expire on 2022-12-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"

 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Теперь вы можете перейти по своему домену, используя протокол HTTPS. 

Шаг 5. Автоматическое обновление SSL

Сертификаты Let’s Encrypt действуют 90 дней, поэтому их нужно своевременно обновлять. Это, конечно, можно делать вручную — с помощью команды:

certbot renew

Но также можно настроить автоматическое обновление, создав соответствующую cron-задачу:

crontab -e

Укажем в ней следующие параметры:

30 3 * * 2 /usr/bin/certbot renew >> /var/log/renew-ssl.log

Таким образом, certbot будет каждый вторник в 03:30 ночи автоматически проверять сертификаты и продлевать те, до истечения которых осталось меньше 30 дней. Результат будет записываться в файл renew-ssl.log.

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону