Certbot: Invalid response from … 404 — по адресу отвечает не тот сервер
Let’s Encrypt подключился по адресу из DNS, но получил 404 — файла проверки там нет. Значит, A- или AAAA-запись ведёт на другой сервер, или при --webroot указана не та папка.
Содержание 11
Что сделать прямо сейчас
- Узнайте, на какие IP-адреса ведёт домен, — шаг 1.
- Исправьте запись, которая ведёт не на ваш сервер, — шаг 2.
- Если в команде был
--webroot, проверьте папку — шаг 3. - Повторите выпуск — шаг 4.
Что значит это сообщение
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: unauthorized
Detail: 203.0.113.10: Invalid response from http://example.com/.well-known/acme-challenge/kD8…: 404
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.Invalid response — «неверный ответ». Let’s Encrypt подключился к IP-адресу из начала строки Detail и запросил файл проверки, а сервер ответил кодом 404 — «не найдено». Длинная строка из букв и цифр после acme-challenge/ у вас будет своя — здесь она сокращена до многоточия.
С ключом --nginx Certbot сам настраивает ответ на этот адрес в nginx вашего сервера. Раз ответа нет, запрос пришёл не туда:
- A-запись ведёт на другой сервер — например, на старый хостинг;
- у домена есть AAAA-запись (IPv6) на другой сервер. Let’s Encrypt идёт сначала по IPv6-адресу. На IPv4 он переходит, только если подключиться по IPv6 не удалось, — а здесь подключение было, и ответил чужой сервер;
- Certbot запускали с ключом
--webroot, и в-wуказана не та папка, из которой nginx отдаёт сайт.
Если адрес в Detail с двоеточиями, например 2001:db8::10, это IPv6 — дело в AAAA-записи. Вместо example.com в примерах подставьте свой домен. Адрес 203.0.113.10 в примерах — условный, у вас в сообщении будет IP-адрес из DNS вашего домена.
Шаг 1. Узнайте, на какие адреса ведёт домен
На своём компьютере откройте терминал (Как открыть терминал) и выполните:
nslookup example.comВ ответе после слова Name: идут строки Address: — все адреса домена. Адрес с точками — из A-записи, с двоеточиями — из AAAA. Сравните их с адресами сервера в панели провайдера. Подробнее о проверке — в Как проверить DNS-записи: IP-адрес домена.
Шаг 2. Исправьте A- или AAAA-запись
- A-запись ведёт не на ваш сервер — исправьте её по инструкции A-запись.
- Есть AAAA-запись, а у сервера IPv6-адреса нет или он другой — удалите её или исправьте по инструкции AAAA-запись.
Новые записи видны не сразу: повторяйте nslookup, пока в ответе не останутся только адреса вашего сервера.
Шаг 3. Если вы запускали Certbot с --webroot
С ключом --webroot Certbot кладёт файл проверки в папку из -w, в подпапку .well-known/acme-challenge/, а nginx должен отдавать его по адресу сайта. Для этого папка в -w должна совпадать со строкой root в настройках сайта. Посмотрите её:
grep -n root /etc/nginx/sites-available/example.comВместо example.com подставьте имя своего файла настроек. Если строка такая:
root /var/www/example.com/html;то и в команде Certbot должно быть -w /var/www/example.com/html. Проверить, что nginx отдаёт файлы из этой папки, можно самим. Создайте пробный файл:
sudo mkdir -p /var/www/example.com/html/.well-known/acme-challenge
echo ok | sudo tee /var/www/example.com/html/.well-known/acme-challenge/testи откройте его со своего компьютера:
curl http://example.com/.well-known/acme-challenge/testВ Windows вводите curl в командной строке, а не в PowerShell — почему, сказано в разделе Как открыть терминал в Windows.
Должно прийти ok. Если пришла страница с 404, nginx берёт файлы из другой папки или запрос попал в другой блок server. После проверки удалите пробный файл:
sudo rm /var/www/example.com/html/.well-known/acme-challenge/testЕсли сайт работает на nginx, проще выпустить сертификат с ключом --nginx — тогда папка не нужна.
Шаг 4. Повторите выпуск
Сначала проверьте на тестовом сервере Let’s Encrypt. Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
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Если код не 404
| Код в конце Detail | Что проверить |
|---|---|
403 | Сервер запретил доступ. При --webroot nginx не может прочитать папку — см. 403 Forbidden |
500, 502, 503 | Сервер по этому адресу отвечает ошибкой. Проверьте, тот ли это сервер (шаг 1), и посмотрите журнал ошибок nginx |
Как проверить
nslookup example.com показывает только адреса вашего сервера, а Certbot с ключом --dry-run пишет The dry run was successful.
Похожие ошибки
| Сообщение | Чем отличается |
|---|---|
| Timeout during connect | Подключиться к серверу не удалось совсем |
| Connection refused | Сервер отказал в подключении к порту 80 |
| 404 Not Found | Тот же код, но в браузере |
Тексты сообщений сверены с исходным кодом Certbot 5.8.0 — эта версия ставится через snap, как в инструкции Бесплатный SSL-сертификат, — и сервера Let’s Encrypt. В Certbot 2.9.0 из пакетов Ubuntu 24.04 вместо Identifier: стоит Domain:, а некоторые строки могут немного отличаться.
Источники
- Исходный код сервера Let’s Encrypt (Boulder): http.go — сначала IPv6, переход на IPv4 только при ошибке подключения; текст Invalid response from.
- Исходный код Certbot 5.8.0: webroot.py — куда --webroot кладёт файл проверки.
- Исходный код Certbot 5.8.0: configurator.py — плагин nginx.
- Исходный код Certbot 2.9.0: auth_handler.py — эта версия стоит в пакетах Ubuntu 24.04.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026