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
の部分は完全に無視されます。
あなたの/_private
場所は正規表現の一致よりも優先されます:
location ^~ /_private {
それでおしまい。
nginxドキュメント には、特定のリクエストに適用されるロケーションブロックに関する適切な情報があります。引用するには:
- クエリに完全に一致するプレフィックスが「=」のディレクティブ。見つかった場合、検索は停止します。
- 従来の文字列を使用した残りのすべてのディレクティブ。この一致で「^〜」プレフィックスが使用されている場合、検索は停止します。
- 構成ファイルで定義されている順序の正規表現。
- #3が一致した場合、その結果が使用されます。それ以外の場合は、#2の一致が使用されます。