我有一个 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
目录并拒绝其他隐藏文件?
答案1
其他解决方案对我没有帮助。
我的解决方案是包括一个否定正则表达式.well-known
您的代码块应如下所示:
## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
deny all;
access_log off;
log_not_found off;
}
它将阻止除以 开头的所有点文件之外的所有点文件.well-known
附言:我也会添加return 404;
到区块中。
答案2
Nginx 按照配置文件中出现的顺序应用正则表达式的位置。
因此,添加这样的条目只是前您当前的位置,它将为您提供帮助。
location ~ /\.well-known {
allow all;
}
答案3
我提供了完整的分步教程如何在 NGINX 中使用 Let's Encrypt在我的网站上。
关键部分是:
- 官方客户端还行,在 Amazon Linux 上表现很差。我建议换一个客户端,尖端。
- 将此位置用于 webroot 方法,以及我推荐的客户端。请注意,请求是通过 http 而不是 https 提供的。
您根本不需要在您的 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;
}
}
完整的分步指南链接如上所述。
答案4
如果你有很多配置文件,并且它们已经包含 .htaccess 上的拒绝,例如
location ~ /\.ht { deny all; }
然后而不是忽略所有点文件,你可以简单地为 .git 添加第二个忽略
sed -i '/location ~ \/\\.ht { deny all; }/a \ location ~ \/\\.git { deny all; }' /etc/nginx/*