---
title: "Установка SSL-сертификата на Nginx — Timeweb Cloud"
description: "Как установить SSL-сертификат на Nginx на Ubuntu и CentOS: выпуск бесплатного Let's Encrypt через Certbot с автопродлением или ручная установка готового сертификата с настройкой конфигурации и редиректа на HTTPS."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Рассмотрим, как установить SSL-сертификат от Let's Encrypt для веб-сервера Nginx на операционных системах Ubuntu и CentOS.

## **Выпуск и установка Let's Encrypt**

### **Установка Certbot**

Для выпуска сертификата воспользуемся утилитой Certbot. 

Ubuntu

Установим Certbot и плагин для Nginx:

```shell
sudo apt install certbot python3-certbot-nginx
```

CentOS

Для установки Certbot на CentOS требуется включить репозиторий EPEL (Extra Packages for Enterprise Linux), который содержит дополнительные пакеты, не входящие в стандартные репозитории CentOS.

Репозиторий EPEL добавляется с помощью пакета `epel-release`, который можно установить так:

```shell
sudo dnf install epel-release
```

После этого, установим Certbot и плагин для Nginx:

```shell
sudo dnf install certbot python3-certbot-nginx
```

Теперь Certbot готов к использованию для выпуска и настройки SSL-сертификата.

### Проверка конфигурации Nginx

Certbot настроит сертификат для виртуального хоста, ориентируясь на домен, указанный в директиве `server_name`. Убедитесь, что в конфигурации Nginx указан правильный домен вашего сайта.

Для этого откройте файл конфигурации:

Ubuntu

```shell
sudo nano /etc/nginx/sites-available/имя_сайта
```

CentOS

```shell
sudo vi /etc/nginx/conf.d/имя_сайта
```

Проверьте, что в директиве `server_name` указан правильный домен. Если нужно внести изменения, сделайте это, а затем сохраните файл.

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

```shell
sudo nginx -t
```

Если вы вносили изменения в конфигурацию, перезапустите веб-сервер:

```shell
sudo systemctl reload nginx
```

### Получение SSL

Запустите Certbot с плагином Nginx, чтобы получить и настроить SSL-сертификат:

```shell
sudo certbot --nginx -d example.com -d www.example.com
```

Где `example.com` и `www.example.com` — это домены, которые должны быть указаны в конфигурации Nginx.

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

После успешного завершения процедуры, Certbot покажет путь к сохранённым сертификатам:

```shell
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for example.com and www.example.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2025-01-14.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for example.com to /etc/nginx/conf.d/example.com.conf
Successfully deployed certificate for www.example.com to /etc/nginx/conf.d/example.com.conf
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com
```

### Автоматическое обновление SSL-сертификатов

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

```shell
certbot renew
```

Однако рекомендуется настроить автоматическое обновление с помощью cron-задачи. Откройте редактор cron:

```shell
crontab -e
```

Добавьте следующую строку:

```shell
30 3 * * 2 /usr/bin/certbot renew >> /var/log/renew-ssl.log --post-hook "systemctl reload nginx"
```

Эта задача настроит автоматическое обновление сертификатов каждый вторник в 03:30 утра. Certbot будет проверять срок действия сертификатов и, если до их истечения останется менее 30 дней, выполнит автоматическое обновление. После успешного обновления Nginx будет перезагружен, чтобы начать использовать новый сертификат. Все действия Certbot будут записываться в файл `renew-ssl.log`.

## Установка существующего сертификата

Если у вас уже приобретен SSL-сертификат, установить его можно по инструкции ниже.

### Загрузка файлов сертификата на сервер

1.  Как правило, после покупки сертификата у вас будут следующие файлы: сам сертификат (`.crt`) и цепочка сертификатов (`.ca-bundle`), которая содержит промежуточный и корневой сертификат. 

Вам нужно скопировать их содержимое в единый файл `ваш_домен.crt`, друг под другом, без пробелов. Файл `ваш_домен.crt` можно создать с помощью Блокнота или любого другого текстового редактора.

У вас получится следующее:

```shell
-----BEGIN CERTIFICATE-----
#Сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----
```

> [!NOTE]
> Если вы покупали SSL в Timeweb Cloud, у вас будет один файл CRT, который уже содержит все необходимые данные. Просто полностью скопируйте его содержимое — это можно сделать в разделе «SSL-сертификаты».

![Cc46ef08 C38e 4cab B644 28d04b7982a1](https://content.timeweb.com/assets/d12a772d-e525-42d6-8e19-c2631789c396?width=1418&height=862)

Если вы покупали SSL у другого провайдера и у вас нет файла цепочки, запросить ее можно через поддержку провайдера или сгенерировать с помощью сервиса [https://whatsmychaincert.com/](https://whatsmychaincert.com/).

2.  Также после покупки SSL у вас будет файл приватного (секретного) ключа.

В Timeweb Cloud файл `Private KEY` можно найти в разделе «SSL-сертификаты». Если вы покупали SSL через другого провайдера и у вас нет этого файла, запросите его через поддержку провайдера.

Создайте новый файл с именем `ваш_домен.key` и скопируйте в него содержимое приватного ключа.

3.  Подключитесь к серверу по [FTP / SFTP](https://timeweb.cloud/docs/unix-guides/sftp) и загрузите файлы в директорию `/etc/ssl`.

Другой вариант — [подключиться по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и создать нужные файлы в директории `/etc/ssl`, например:

```shell
sudo nano /etc/ssl/mydomain.ru.crt
```

В созданный файл вставьте содержимое сертификата и цепочки. Сохраните изменения (Ctrl+X, затем Y и Enter).

Создайте файл ключа:

```shell
sudo nano /etc/ssl/mydomain.ru.key
```

Вставьте в него содержимое файла ключа и сохраните изменения.

### Настройка конфигурационного файла Nginx

В зависимости от ваших настроек, потребуется изменить либо основной конфиг-файл Nginx (`/etc/nginx/nginx.conf`), либо конфиг виртуального хоста, если вы его создавали.

Для Ubuntu файл конфигурации виртуального хоста находится по пути `/etc/nginx/sites-available/ваш_домен.conf`. Для CentOS конфигурационный файл виртуального хоста располагается в директории `/etc/nginx/conf.d/ваш_домен.conf`.

Ubuntu

Откройте его:

```shell
sudo nano /etc/nginx/sites-available/ваш_домен.conf
```

CentOS

Откройте его:

```shell
sudo vi /etc/nginx/conf.d/ваш_домен.conf
```

В блок `server{}` добавьте следующие данные:

Вместо:

```shell
listen 80;
listen [::]:80;
```

Укажите:

```shell
listen 443 ssl;
```

Под строкой:

```shell
server_name ваш_домен www.ваш_домен;
```

Укажите пути к файлам сертификата и ключа: 

```shell
ssl_certificate /etc/ssl/ваш_домен.crt;
ssl_certificate_key /etc/ssl/ваш_домен.key;
```

Чтобы перенаправлять клиентов, обратившихся к сайту по HTTP, на безопасное подключение, добавьте новый блок `server{}` под существующим со следующим содержимым:

```shell
server {
    listen 80;
    listen [::]:80;

    server_name ваш_домен www.ваш_домен;
    return 302 https://$server_name$request_uri;
}
```

Здесь мы указываем временный 302 редирект. После того, как вы проверите работу и убедитесь, что все в порядке, замените его на 301.

В итоге у вас должно получиться что-то подобное:

```shell
server {
  listen 443 ssl;

    server_name mydomain.ru www.mydomain.ru;
    ssl_certificate /etc/ssl/mydomain.ru.crt;
    ssl_certificate_key /etc/ssl/mydomain.ru.key;
    root /var/www/mydomain.ru/html;
    index index.html index.xml;
}
server {
    listen 80;
    listen [::]:80;

    server_name mydomain.ru www.mydomain.ru;
    return 302 https://$server_name$request_uri;
}
```

Этих настроек достаточно для работы сертификата. Вы можете сохранить изменения и сразу перейти к шагу 4. Либо можно настроить дополнительные параметры — их рассмотрим на следующем шаге.

### Дополнительные настройки (опционально)

1.  Чтобы оптимизировать работу Nginx при использовании SSL, можно задействовать кэш SSL-сессий. 

-   -   Укажем, что будем использовать shared-кэш, который делится между всеми рабочими процессами, и его размер — 10 МБ:

```shell
ssl_session_cache shared:SSL:10m;
```

Эту и следующие строки также вставьте в блок `server{}` — под строки с путями до сертификатов.

-   -   Зададим таймаут кэша в 10 минут:

```shell
ssl_session_timeout 10m;
```

Таймаут — это период, в течение которого параметры SSL-сессии используются повторно. По умолчанию таймаут равен 5 минутам, если вам подходит это значение, директиву `ssl_session_timeout` можно не указывать. А можно, напротив, значительно увеличить таймаут, чтобы повысить производительность веб-сервера — например, до одного дня (`1d`).

-   -   Зададим время работы одного соединения:

```shell
keepalive_timeout 70;
```

2.  Чтобы ускорить загрузку страниц сайта у его посетителей, можно включить опцию SSL stapling — это разрешит серверу прикреплять OCSP-ответы для валидации сертификата. 

Для этого вам понадобится создать файл `ca.crt`, который будет содержать корневой сертификат, полученный вами при покупке SSL (в файле цепочки он идет последним).

Созданный файл нужно разместить на сервере в директории с сертификатами `/etc/ssl`.

Включаем SSL stapling, добавляя директиву:

```shell
ssl_stapling on;
```

Указываем путь к корневому сертификату:

```shell
ssl_trusted_certificate /etc/ssl/ca.crt;
```

Указываем DNS:

```shell
resolver 8.8.8.8;
```

Сохраните изменения.

В итоге вас получится конфигурация примерно следующего вида:

```shell
server {
  listen 443 ssl;

    server_name mydomain.ru www.mydomain.ru;
    ssl_certificate /etc/ssl/mydomain.ru.crt;
    ssl_certificate_key /etc/ssl/mydomain.ru.key;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    keepalive_timeout 70;
    ssl_stapling on;
    ssl_trusted_certificate /etc/ssl/ca.crt;
    resolver 8.8.8.8;

    root /var/www/mydomain.ru/html;
    index index.html index.xml;
}

server {
    listen 80;
    listen [::]:80;

    server_name mydomain.ru www.mydomain.ru;
    return 302 https://$server_name$request_uri;
}
```

### Применение настроек

Проверьте конфигурацию Nginx:

```shell
sudo nginx -t
```

Перезапустите Nginx, чтобы изменения вступили в силу:

```shell
sudo systemctl restart nginx
```

Проверьте работу сайта — теперь он должен быть доступен по HTTPS.
