Nginx 禁用 .htaccess 和隐藏文件但允许 .well-known 目录

Nginx 禁用 .htaccess 和隐藏文件但允许 .well-known 目录

我有一个 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/*

相关内容