Nginxは.htaccessおよび隠しファイルを無効にしますが、.well-knownディレクトリを許可します


16

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


注:nginxは.htaccessファイルを使用しないか、ファイルを持ちません。構成ファイルがありますが、それらは呼び出され.htaccessず、同じように機能しません。
ロブ

回答:


17

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

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

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

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

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


1
あるlocation ~* /\.(?!well-known\/) {時に見られるようにgithub.com/h5bp/server-configs-nginx/blob/master/h5bp/location/...これと同じlocation ~ /\.(?!well-known).* {
プロバックアップ

3
いいえ、まったく同じではありません。/\.(?!well-known\/)私の正規表現ほど表現力がありません(定義でよく知られている以外のすべてのドットファイルをブロックするため)。おそらく、よくlocation ~ /\.(?!well-known\/).*知られているディレクトリのみをブロック解除し、理論的にもブロック解除するような組み合わせが最適かもしれません.well-known-blabla。しかし、理論的な.well-known-blablaファイルをブロックしないことには、実際の危険はないと思います。
therealmarv

とにかくNginxはそれを処理しないので、なぜhtaccessを無効にしますか?
ウェブウーマン

3
はい、あなたは正しい@webwomanですが、時々混合環境があります。本当に必要な場合を除き、ドットファイルは私の意見では提供しないでください(セキュリティまたは.gitなどの不要な履歴の公開)。
therealmarv

16

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

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

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

ありがとう、これはまさに私が必要としたものです!すべてのドットファイルへのアクセスを拒否するルールの前にこれを配置しました。変更したのは、ドットをエスケープすることだけでした(例:)location ~ /\.well-known {。いずれにせよ、これは受け入れられた答えでなければなりません。
aexl

8

私のWebサイトでLet's Encryptを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;
  }
}

上にリンクされた完全なステップバイステップガイド。


3

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

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

マッチング^~修飾子は正規表現よりも優先されるため、これも下部に追加できます。ドキュメントを参照しください。


0

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

location ~ /\.ht { deny all; }

その後、代わりにすべてのドットファイルを無視するのは、単に秒で.gitで無視追加することができます

sed -i '/location ~ \/\\.ht { deny all; }/a \  location ~ \/\\.git { deny all; }' /etc/nginx/*
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.