Ошибка nginx no ssl_certificate is defined: HTTPS без сертификата
В блоке server есть строка listen со словом ssl, а строк с сертификатом нет. Если сертификата ещё нет, уберите эту строку и выпустите его через Certbot. Если он уже выпущен, допишите строки ssl_certificate и ssl_certificate_key.
Содержание 9
Что сделать прямо сейчас
- Откройте файл на строке из сообщения — шаг 1.
- Сертификата нет — уберите строку listen с ssl: Если сертификата ещё нет. Сертификат есть — допишите его в блок: Если сертификат уже выпущен.
- Проверьте и примените настройки — шаг 3.
Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Что значит это сообщение
2026/10/09 12:00:00 [emerg] 2345#2345: no "ssl_certificate" is defined for the "listen ... ssl" directive in /etc/nginx/sites-enabled/example.com:1
nginx: configuration file /etc/nginx/nginx.conf test failed«Для listen … ssl не указан ssl_certificate». Слово ssl в строке listen значит, что по этому порту nginx должен отвечать по HTTPS. Для этого ему нужен сертификат, а строк ssl_certificate и ssl_certificate_key в блоке нет. Дата, время и номер процесса у вас будут свои. В других сборках nginx та же строка начинается со слов nginx: [emerg].
Номер в конце — строка, где начинается блок server {, а не строка listen.
nginx проверяет блок, который стоит на этом порту по умолчанию: блок с пометкой default_server, а если её нет — первый по порядку блок с этим портом.
Причины:
- строку
listen 443 ssl;дописали заранее — до того, как выпустили сертификат; - блок для HTTPS скопировали из другого файла, а строки с сертификатом не перенесли;
- строки ssl_certificate стоят в другом блоке server — например, в блоке для порта 80. Каждый блок server настраивается отдельно.
Шаг 1. Откройте блок из сообщения
Откройте файл из сообщения сразу на нужной строке: число после знака + — номер строки из сообщения, путь — тот, что стоит перед двоеточием.
sudo nano -l +1 /etc/nginx/sites-available/example.comЕсли в сообщении путь начинается с /etc/nginx/sites-enabled/, откройте файл с тем же именем в папке /etc/nginx/sites-available/ — там лежит оригинал, а в sites-enabled только ссылка на него. Как это проверить, написано в разделе «Какой файл открывать».
Посмотрите в этом блоке строки listen и строки, которые начинаются с ssl_.
Шаг 2. Найдите свой случай
Если сертификата ещё нет
Найдите в блоке строки listen со словом ssl — например, listen 443 ssl; и listen [::]:443 ssl;. Поставьте курсор на такую строку и нажмите Ctrl+K — nano удалит её целиком. Удалите так все строки listen со словом ssl.
Если после этого в блоке не осталось ни одной строки listen, весь блок был только для HTTPS. Удалите его целиком — от server { до закрывающей } — тем же Ctrl+K.
Сохраните файл: Ctrl+O, Enter, затем Ctrl+X. Примените настройки по шагу 3, а затем выпустите сертификат по инструкции Как поставить сертификат на свой VPS — Certbot сам пропишет его в настройки nginx.
Если сертификат уже выпущен
Узнайте пути к файлам сертификата:
sudo certbot certificatesКоманда покажет все сертификаты, которые выпустил Certbot. У каждого есть строка Certificate Path: — путь для ssl_certificate — и строка Private Key Path: — путь для ssl_certificate_key. Если сертификат на одно имя выпускали ещё раз, рядом может оказаться второй, с окончанием -0001 в названии папки.
Допишите в тот же блок server, под строки listen, две строки с этими путями:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
Если в сообщении for the "ssl" directive
2026/10/09 12:00:00 [warn] 2345#2345: the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/sites-enabled/example.com:5
2026/10/09 12:00:00 [emerg] 2345#2345: no "ssl_certificate" is defined for the "ssl" directive in /etc/nginx/sites-enabled/example.com:5В блоке стоит старая строка ssl on;. Номер в конце сообщения указывает на неё. Удалите эту строку, а в строку listen 443; допишите слово ssl: listen 443 ssl;. Потом допишите сертификат, как в разделе Если сертификат уже выпущен.
Шаг 3. Проверьте и примените настройки
Проверьте настройки ещё раз командой sudo nginx -t. Когда в ответе будут слова syntax is ok и test is successful, примените их:
sudo systemctl reload nginxЕсли команда ничего не ответила, настройки применены.
Как проверить
sudo nginx -t отвечает syntax is ok и test is successful. Если вы дописали сертификат, сайт открывается по https:// без предупреждения. Если убрали строку listen, сайт открывается по http:// — теперь можно выпускать сертификат.
Похожие ошибки
| Сообщение | Чем отличается |
|---|---|
| cannot load certificate | Строка ssl_certificate есть, но файла по этому пути нет |
| key values mismatch | Ключ от другого сертификата |
| a duplicate default server | default_server на одном порту стоит в двух блоках |
Тексты сообщений на этой странице сверены с исходным кодом nginx 1.24.0 — эта версия стоит в Ubuntu 24.04. В других версиях слова могут немного отличаться.
Источники
- Исходный код nginx 1.24.0: ngx_http_ssl_module.c — тексты no "ssl_certificate" is defined и какой блок проверяется.
- Документация nginx: модуль ngx_http_ssl_module — директивы ssl_certificate и ssl_certificate_key, директива ssl устарела.
- Документация nginx: модуль ngx_http_core_module — директива listen и сервер по умолчанию.
- Документация Certbot: управление сертификатами — команда certbot certificates.
- Документация Certbot: где лежат сертификаты — какие файлы указывать в настройках.
- Справка nano — Ctrl+K удаляет строку.
Сверено 9–10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026