web-dev-qa-db-ja.com

すべてを拒否すると、別のロケーションブロックによって上書きされます

location /_private {
    deny    all;
}

location ~ \.php$ {
    # Workaround PHP vulnerability:
    # http://forum.nginx.org/read.php?2,88845,page=3
    try_files   $uri =404;

    include /etc/nginx/fastcgi_params;
    keepalive_timeout 0;

    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass    unix:/tmp/php.socket;
}

_privateディレクトリにあるすべてのものへのアクセスを拒否したいと思います。 _private/aにアクセスしようとすると、想定どおり403エラーが発生します。しかし、_private/b.phpにアクセスしようとすると、deny allの部分は完全に無視されます。

3
Ragnis

あなたの/_private場所は正規表現の一致よりも優先されます:

location ^~ /_private {

それでおしまい。

nginxドキュメント には、特定のリクエストに適用されるロケーションブロックに関する適切な情報があります。引用するには:

  1. クエリに完全に一致するプレフィックスが「=」のディレクティブ。見つかった場合、検索は停止します。
  2. 従来の文字列を使用した残りのすべてのディレクティブ。この一致で「^〜」プレフィックスが使用されている場合、検索は停止します。
  3. 構成ファイルで定義されている順序の正規表現。
  4. #3が一致した場合、その結果が使用されます。それ以外の場合は、#2の一致が使用されます。
3
Shane Madden