web-dev-qa-db-ja.com

Nginxロケーションの優先順位

ロケーションディレクティブはどの順序で起動しますか?

155
user650505

HttpCoreModule docs から:

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

ドキュメントの例:

location  = / {
  # matches the query / only.
  [ configuration A ] 
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  [ configuration B ] 
}
location /documents/ {
  # matches any query beginning with /documents/ and continues searching,
  # so regular expressions will be checked. This will be matched only if
  # regular expressions don't find a match.
  [ configuration C ] 
}
location ^~ /images/ {
  # matches any query beginning with /images/ and halts searching,
  # so regular expressions will not be checked.
  [ configuration D ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg. However, all
  # requests to the /images/ directory will be handled by
  # Configuration D.   
  [ configuration E ] 
}

それでも混乱する場合は、 詳細な説明はこちら を参照してください。

293
Martin Redmond

この順序で起動します。

  1. =(exactly)

    location = /path

  2. ^~(前方一致)

    location ^~ /path

  3. ~(大文字と小文字を区別する正規表現)

    location ~ /path/

  4. ~*(大文字と小文字を区別しない正規表現)

    location ~* .(jpg|png|bmp)

  5. /

    location /path

41
Don Dilanga