Certbot: Connection refused — сервер отказал в подключении к порту 80
Let’s Encrypt подключился к IP-адресу из DNS, но порт 80 ответил отказом: nginx не запущен, не слушает этот порт или фаервол отвечает отказом. Запустите nginx и откройте порт 80.
Содержание 11
Что сделать прямо сейчас
- Сверьте IP-адрес из сообщения с адресом сервера — шаг 1.
- Проверьте, работает ли nginx, — шаг 2.
- Проверьте, слушает ли он порт 80, — шаг 3.
- Проверьте правила ufw — шаг 4.
- Повторите выпуск — шаг 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:, а некоторые строки могут немного отличаться.
Источники
- Исходный код сервера Let’s Encrypt (Boulder): va.go — текст Connection refused.
- man ufw — правила deny и reject.
- Исходный код Certbot 5.8.0: auth_handler.py — как Certbot показывает неудачную проверку.
- Исходный код Certbot 2.9.0: auth_handler.py — эта версия стоит в пакетах Ubuntu 24.04.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026