Ошибки

Certbot: Connection refused — сервер отказал в подключении к порту 80

Let’s Encrypt подключился к IP-адресу из DNS, но порт 80 ответил отказом: nginx не запущен, не слушает этот порт или фаервол отвечает отказом. Запустите nginx и откройте порт 80.

Обновлено 10.10.2026≈ 5 мин чтения
Содержание 11

Что сделать прямо сейчас

  1. Сверьте IP-адрес из сообщения с адресом сервера — шаг 1.
  2. Проверьте, работает ли nginx, — шаг 2.
  3. Проверьте, слушает ли он порт 80, — шаг 3.
  4. Проверьте правила ufw — шаг 4.
  5. Повторите выпуск — шаг 5.

Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.

Что значит это сообщение

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

Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems:
  Identifier: example.com
  Type:   connection
  Detail: 203.0.113.10: Fetching http://example.com/.well-known/acme-challenge/kD8…: Connection refused

Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet.

Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.

Connection refused — «в подключении отказано». Компьютер с IP-адресом из начала строки Detail ответил сразу, но отказом: на порту 80 никакая программа не ждёт подключений или фаервол настроен отвечать отказом. Длинная строка из букв и цифр после acme-challenge/ у вас будет своя — здесь она сокращена до многоточия.

Вместо example.com в примерах подставьте свой домен. Адрес 203.0.113.10 в примерах — условный, у вас в сообщении будет IP-адрес из DNS вашего домена.

Шаг 1. Сверьте IP-адрес

Сравните IP-адрес в начале строки Detail с адресом сервера в панели провайдера. Если они разные, A-запись ведёт на другой компьютер — исправьте её по инструкции A-запись.

Шаг 2. Проверьте, работает ли nginx

sudo systemctl status nginx

Нужна строка Active: active (running). Чтобы вернуться в командную строку, нажмите q. Если там inactive (dead) или failed, запустите nginx:

sudo systemctl start nginx

Если вместо запуска появилось Job for nginx.service failed, разберите ошибку по странице Job for nginx.service failed.

Шаг 3. Проверьте, слушает ли nginx порт 80

sudo ss -ltnp | grep ':80 '

Если nginx слушает порт 80, ответ будет таким — номера процессов у вас свои:

LISTEN 0      511          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=1234,fd=6),("nginx",pid=1233,fd=6))
LISTEN 0      511             [::]:80           [::]:*    users:(("nginx",pid=1234,fd=7),("nginx",pid=1233,fd=7))
  • Ответ пустой — порт 80 никто не слушает. Проверьте, что в блоке server вашего сайта есть строка listen 80; — как она выглядит, показано в Как разместить сайт на VPS: шаг 4.
  • В кавычках не nginx, а другая программа — например, apache2. Порт занят ею; как его освободить, разобрано на странице Address already in use.

Шаг 4. Проверьте правила ufw

sudo ufw status numbered

Если в списке есть строка с 80 и словом REJECT, фаервол отвечает на подключения отказом. Удалите это правило по номеру из квадратных скобок — вместо 3 поставьте свой — и разрешите порты 80 и 443:

sudo ufw delete 3
sudo ufw allow 80
sudo ufw allow 443

На вопрос ufw ответьте y и нажмите Enter.

Шаг 5. Повторите выпуск

Сначала проверьте на тестовом сервере Let’s Encrypt:

sudo certbot certonly --nginx --dry-run -d example.com -d www.example.com

Если в конце строка The dry run was successful., выпустите сертификат:

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

Как проверить

Со своего компьютера выполните curl -I http://example.com/ — первая строка ответа должна начинаться с HTTP/1.1. Тестовый выпуск пишет The dry run was successful.

Похожие ошибки

СообщениеЧем отличается
Timeout during connectСервер не отвечает совсем — порт закрыт фаерволом, который молча отбрасывает подключения
Could not bind TCP port 80Наоборот: порт 80 занят, а Certbot в режиме --standalone хочет занять его сам
ERR_CONNECTION_REFUSEDТот же отказ, но в браузере

Тексты сообщений сверены с исходным кодом Certbot 5.8.0 — эта версия ставится через snap, как в инструкции Бесплатный SSL-сертификат, — и сервера Let’s Encrypt. В Certbot 2.9.0 из пакетов Ubuntu 24.04 вместо Identifier: стоит Domain:, а некоторые строки могут немного отличаться.

Источники

Сверено 10 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 10.10.2026