Добрый день, не получается сгенерировать сертификат из-за ошибки:
Failed authorization procedure. rukzak3d.ru (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from domain.ru/.well-known/acme-challenge/Iurj9ChNH9JNH... [82.146.55.40]: "\r\n404 Not Found\r\n\r\n404 Not Found\r\nnginx/1.19.0"
Читаю, логи прихожу к выводу, что механизм работы подтверждения домена следующий:
1) Certbot создает конфиг nginx вида:
location /.well-known/acme-challenge/Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0 {
default_type "text/plain";
return 200 Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0.DyD11cIvsF3VQsyoJH3me_in7zC0mwIq5myzx10Pa3c;
}
2) Подключает его в самое начало блока http в основном конфиге /etc/nginx/nginx.conf
http {
include /etc/letsencrypt/le_http_01_cert_challenge.conf;
3) Идет по адресу
domain.ru/.well-known/acme-challenge/Iurj9ChNH9JNH... и проверяет код ответа, если не 200 то выдает ошибку.
Сейчас конфиг /etc/nginx/nginx.conf такой:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
server {
charset utf-8;
listen 443;
keepalive_timeout 120;
index index.php index.html;
root /var/www/sites/domain/web;
server_name domain.ru;
index index.php;
location / {
try_files $uri /index.php?$args;
}
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/sites/domain/web;
}
}
}
Если я в секцию server добавляю код:
http {
...
server {
....
location /.well-known/acme-challenge/Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0 {
default_type "text/plain";
return 200 Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0.DyD11cIvsF3VQsyoJH3me_in7zC0mwIq5myzx10Pa3c;
}
}
То браузер по адресу
domain.ru/.well-known/acme-challenge/Iurj9ChNH9JNH... отвечает 200-м кодом.
Если вставить в том место где подключается конфиг certbot'м, т.е. в начало секции http:
http {
location /.well-known/acme-challenge/Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0 {
default_type "text/plain";
return 200 Iurj9ChNH9JNHUtLUxc_6A0Yo4HS8AoEshvPTx_JXo0.DyD11cIvsF3VQsyoJH3me_in7zC0mwIq5myzx10Pa3c;
}
...
server {
....
}
Получаем 404 ошибку :(
Вопрос, как заставить nginx отвечать 200м кодом при подключенном /etc/letsencrypt/le_http_01_cert_challenge.conf в начало секции http? Или как заставить certbot помещать конфиг в секцию server?