jpg / txtの一致ではなくtestdirの一致が選択されるようにするには、次の場所を使用します。
location ^~ /testdir {
deny all;
return 404;
}
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
この例では、2種類の場所があります。location /testdir
は、との~
間にチルダ()がないため、プレフィックスの場所です。location
/testdir
location ~* ^.+\.(jpg|txt)$
正規表現の場所です(*
チルダの直後にあるため、大文字と小文字を区別しません)。nginxドキュメントから:
特定の要求に一致する場所を見つけるために、nginxは最初にプレフィックス文字列(プレフィックスの場所)を使用して定義された場所を確認します。その中で、最も長いプレフィックスを持つ場所が選択され、記憶されます。次に、構成ファイルでの出現順に正規表現がチェックされます。正規表現の検索は最初の一致で終了し、対応する構成が使用されます。正規表現と一致するものが見つからない場合は、以前に記憶されたプレフィックスロケーションの設定が使用されます。
ここでの問題は、testdirの場所が記憶されているが、正規表現の段階でjpg / txtの場所が一致するように選択されることです。ドキュメントからの次の注意事項は、ソリューション(上記)の基になったものです。
最長一致プレフィックス位置に「^〜」修飾子がある場合、正規表現はチェックされません。