Nginx の location ディレクティブは、リクエストされた URI をどのように処理するかを決定する重要な設定です。 複数の location がある場合、どのブロックが選ばれるかは特定のルールに従います。
location の種類
プレフィックスマッチ(無印)
location /images/ { ... }
- URI が /images/ で始まるリクエストにマッチ。
 - 最長一致ルールが適用される。
 - 正規表現ロケーションより優先度は低い。
 
厳密一致(=)
location = /exact/path { ... }
- URI が完全一致したときのみ適用。
 - 最優先でマッチする。
 
正規表現マッチ(~)
location ~ \.php$ { ... }
- 正規表現に基づいたマッチング。
 - 大文字・小文字を区別する。
 
正規表現マッチ(~*)
location ~* \.(jpg|jpeg|png)$ { ... }
- 正規表現に基づいたマッチング。
 - 大文字・小文字を区別しない。
 
強制プレフィックスマッチ(^~)
location ^~ /static/ { ... }
- URI が /static/ で始まればマッチ。
 - この場合、正規表現ロケーションの評価をスキップして確定する。
 - 正規表現より優先的に処理させたいときに有効。
 
マッチングの優先順位
Nginx が location を選ぶ流れは次の通りです。
**=(厳密一致)**があればそれを採用**プレフィックスマッチ(無印 / ^~)**から最長一致を探す- この候補が 
^~なら確定(正規表現は無視) **正規表現ロケーション(~ / ~*)**を設定順に評価- 最初にマッチしたものを採用
 - 正規表現にマッチしなければ、2 のプレフィックス最長一致を採用
 
実例
location /images/ { ... }               # プレフィックス
location ^~ /images/icons/ { ... }      # 強制プレフィックス
location ~* \.(gif|jpg|png)$ { ... }    # 正規表現
- リクエスト 
/images/icons/logo.png
→^~ /images/icons/にマッチし、正規表現は無視される。 - リクエスト /images/photo.jpg
→/images/が候補だが、正規表現~* \.(gif|jpg|png)$もマッチ
→ 正規表現が優先される。 
パフォーマンスとベストプラクティス
- プレフィックスマッチを優先して使う
正規表現は柔軟だが CPU コストが高い。^~ を活用すると効率的。 - 正規表現は必要最小限に
拡張子チェックや特殊なルーティングに絞る。 - わかりやすい設計にする
プレフィックスと正規表現が混在すると可読性が下がるので、意図を明確に。 
まとめ
=:完全一致、最優先。^~:プレフィックスで確定、正規表現を無視。- 無印:通常のプレフィックス、最長一致。
 ~:正規表現(大文字区別)。~*:正規表現(大文字区別なし)。
原則は プレフィックスで表現できるものはプレフィックスを使い、正規表現は最小限に使用するといいです。
