У меня есть сервер Nginx, и я отключил скрытые файлы в nginx_vhost.conf
## Disable .htaccess and other hidden files
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
Но LetsEncrypt нужен доступ к .well-known
каталог.
Как мне разрешить .well-known
каталог и запретить другие скрытые файлы?
Другие решения мне не помогли.
Мое решение - включить отрицательное регулярное выражение для .well-known
. Тогда ваш блок кода должен выглядеть так:
## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
deny all;
access_log off;
log_not_found off;
}
Он заблокирует все точечные файлы, кроме тех, которые начинаются с .well-known
P.S .: Еще бы добавил return 404;
к блоку.
Nginx применяет местоположения с регулярными выражениями в порядке их появления в файле конфигурации.
Поэтому добавление такой записи просто перед ваше текущее местоположение поможет вам.
location ~ /\.well-known {
allow all;
}
Я предоставил полное пошаговое руководство по как использовать Let's Encrypt с NGINX на моем сайте.
Ключевые части:
Вам вообще не нужны слушатели в вашем блоке https, все это делается на https. Это только для того, чтобы доказать, что вы контролируете домен, он не обслуживает ничего личного или секретного.
# Answer let's encrypt requests, but forward everything else to https
server {
listen 80;
server_name example.com www.example.com
access_log /var/log/nginx/access.log main;
# Let's Encrypt certificates with Acmetool
location /.well-known/acme-challenge/ {
alias /var/www/.well-known/acme-challenge/;
}
location / {
return 301 https://www.example.com$request_uri;
}
}
Полное пошаговое руководство по ссылке выше.
Добавьте это (до или после):
location ^~ /.well-known/ {
log_not_found off;
}
Вы можете добавить это также внизу, потому что соответствие ^~
модификатор имеет приоритет над регулярными выражениями. Увидеть документы.
Если у вас много файлов конфигурации, и они уже содержат запрет на .htaccess, например
location ~ /\.ht { deny all; }
затем вместо игнорирования всех точечных файлов, вы можете просто добавить второй игнорирование для .git с помощью
sed -i '/location ~ \/\\.ht { deny all; }/a \ location ~ \/\\.git { deny all; }' /etc/nginx/*