Certbot не удалось пройти проверку для некоторых доменов (аутентификатор: nginx)

Вопрос или проблема

Я запускаю nginx как обратный прокси, и по какой-то причине я не могу обновить сертификат Letencrypt. Я попытался обновить nginx и certbot до последней версии. Ранее это работало, и я не уверен, изменялась ли конфигурация сервера.

При выполнении certbot renew я получаю следующую ошибку от certbot:

certbot renew --nginx --dry-run

Certbot не удалось аутентифицировать некоторые домены (аутентификатор: nginx). Удостоверяющий центр сообщил о следующих проблемах:
Домен: myurl
Тип: неавторизованный
Детали: : Неверный ответ от http://myurl/.well-known/acme-challenge/asdasd: 404

Подсказка: Удостоверяющему центру не удалось убедиться в временных изменениях конфигурации nginx, сделанных Certbot. Убедитесь, что указанные домены указывают на этот сервер nginx и что он доступен из Интернета.

Пример журнала ошибок Nginx:

2023/08/03 08:22:36 [error] 13286#13286: *32 open() "/usr/share/nginx/html/.well-known/acme-challenge/asdasd" не удалось (2: Нет такого файла или каталога), клиент: ipadress, сервер: ipadress, запрос: "GET /.well-known/acme-challenge/asdasd HTTP/1.1", хост: "url"

Насколько я понимаю, nginx не может обслуживать acme-challange, или certbot записывает задание в другое место, чем /usr/share/nginx/html ….

Может кто-то указать мне верное направление?

Заранее спасибо

Обновление
Вывод от команд @symcbean сообщает “Нет такого файла или каталога”
ls -l /usr/share/nginx/html/.well-known/acme-challenge/
ls: не удается получить доступ к ‘/usr/share/nginx/html/.well-known/acme-challenge/’: Нет такого файла или каталога

Как я могу узнать, что cerbot пытается записать в /usr/share/… а не в другую папку?

Пример конфигурации сайта nginx.

upstream beta-api {
    server 10.166.0.4:8384;
}

server {
    server_name betaapi.ancytree.com;
    listen 80;
    # установить размер тела клиента в 8M #
    client_max_body_size 8M;
        
    location / {
        proxy_pass http://beta-api;
        include proxy_params;
    }

}

Вы посмотрели свои журналы — это хорошее начало! Поскольку, похоже, LetsEncrypt получает доступ к вашему сайту, можно исключить множество проблем, связанных с DNS и HTTP.

Следующее, что следует попробовать, — это выполнить проверку HTTP-01 самостоятельно и посмотреть, что произойдет.

Обновления Certbot будут выполняться в виде cron-задания, поэтому это необходимо выполнить с использованием того же аккаунта:

echo "test" >/usr/share/nginx/html/.well-known/acme-challenge/asdasd
ls -l /usr/share/nginx/html/.well-known/acme-challenge/asdasd
cat /usr/share/nginx/html/.well-known/acme-challenge/asdasd
curl -I http://myurl/.well-known/acme-challenge/asdasd

Если это не даст ответа, обновите свой пост с выводом этих команд.

(вероятные причины: права доступа к файлу, включая MAC, отсутствующие каталоги или отсутствующее сопоставление в вашем веб-сервере между файловой системой и путём URL)

Ответ или решение

Конечно, давайте подробно разберем вашу проблему с неудачной аутентификацией доменов Certbot и Nginx.

Проблема:

Вы используете Nginx как обратный прокси-сервер и столкнулись с проблемами при попытке обновить сертификат Let’s Encrypt с помощью Certbot. Вы получили ошибку: "Certbot не удалось аутентифицировать некоторые домены (authenticator: nginx)". В частности, отмечено, что ответ сервера на запрос "http://yoururl/.well-known/acme-challenge/asdasd" привел к ошибке 404.

Диагностика:

  1. Конфигурация Nginx: Согласно предоставленному конфигурационному файлу Nginx, сервер лишь проксирует запросы на внутренний сервер, но в конфигурации отсутствует возможность обработки запросов для ACME Challenge, что может вызвать ошибку 404.

  2. Каталог ACME-Challenge: Отсутствие каталога /usr/share/nginx/html/.well-known/acme-challenge/ подтверждает, что веб-сервер не может найти временные файлы в указанном месте, что предполагает неправильную настройку пути.

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

Решение:

Для устранения этой проблемы рекомендуется предпринять следующие шаги:

1. Настроить обработку ACME Challenge:

Измените конфигурацию вашего Nginx сервера так, чтобы он мог обслуживать .well-known/acme-challenge запросы. Добавьте следующую секцию в ваш конфигурационный файл:

server {
    server_name betaapi.ancytree.com;
    listen 80;

    location / {
        proxy_pass http://beta-api;
        include proxy_params;
    }

    location /.well-known/acme-challenge/ {
        root /usr/share/nginx/html; # Путь к каталогу, где должны создаваться временные файлы Certbot
    }

    # Остальная часть конфигурации
}

2. Создать необходимые каталоги:

Убедитесь, что все необходимые каталоги созданы и имеют правильные разрешения:

sudo mkdir -p /usr/share/nginx/html/.well-known/acme-challenge
sudo chown -R www-data:www-data /usr/share/nginx/html

3. Проверить пути и тестировать:

Попробуйте вручную провести тестовый запрос:

echo "test" > /usr/share/nginx/html/.well-known/acme-challenge/testfile
curl -I http://betaapi.ancytree.com/.well-known/acme-challenge/testfile

Убедитесь, что сервер возвращает корректные заголовки HTTP и ответ не является ошибкой 404.

4. Перезапустить Nginx:

После внесения изменений в конфигурацию, перезапустите Nginx:

sudo systemctl restart nginx

SEO Оптимизация:

  • Поскольку вопрос связан с Certbot и Nginx, полезно использовать подобные ключевые слова и фразы, такие как «сертификат Let’s Encrypt», «обратный прокси», «ошибка 404» и «настройка Nginx для Certbot», чтобы повысить видимость статьи в поисковых системах.

Эти шаги помогут вам устранить текущую проблему аутентификации доменов с использованием Certbot на вашем Nginx сервере. Если проблема сохраняется, рассмотрите возможность глубокого анализа логов и возможные конфликты с другими настройками или сервисами.

Оцените материал
Добавить комментарий

Капча загружается...