web-dev-qa-db-ja.com

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ディレクトリを許可し、他の隠しファイルを拒否するにはどうすればよいですか?

17
Janghou

他の解決策は私を助けませんでした。

私の解決策は、.well-knownnegative regex を含めることです。コードブロックは次のようになります。

## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
    deny all;
    access_log off;
    log_not_found off;
}

.well-knownで始まるものを除くすべてのドットファイルをブロックします

PS:私はreturn 404;もブロックに追加します。

20
therealmarv

Nginxは、構成ファイルでの出現順に正規表現を使用して場所を適用します。

したがって、このようなエントリを追加するだけでbefore現在の場所が役立ちます。

location ~ /\.well-known { 
    allow all;
}
17
Weirdei

Webサイトで、完全なステップバイステップチュートリアル Let's Encrypt with NGINXを使用する方法 を提供しています。

重要な部分は次のとおりです。

  • 公式クライアントは大丈夫で、Amazon Linuxでは本当に貧弱です。別のクライアント [〜#〜] acme [〜#〜] をお勧めします。
  • 私の推奨クライアントで、この場所をwebrootメソッドに使用します。リクエストはhttpsではなくhttpで提供されることに注意してください。

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;
  }
}

上記のリンクの完全なステップバイステップガイド。

8
Tim

これを追加します(前または後):

location ^~ /.well-known/ {
        log_not_found off;
     }

一致する^~修飾子は正規表現よりも優先されるため、これを下部に追加することもできます。 the docs を参照してください。

3
Janghou

たくさんの設定ファイルがあり、それらにすでに.htaccessの拒否が含まれている場合

location ~ /\.ht { deny all; }

次にすべてのドットファイルを無視する代わりに 、. gitの2番目の無視を追加するだけで

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
0
rubo77