nginxロケーションブロックでアットマーク「@」は何を意味しますか?


20

ここで、この構文を使用するいくつかの質問と回答に遭遇しました。

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Googleで高低を検索しましたが、ドキュメントが見つからないようです。それは何を意味し、実際の用途は何ですか?それは何らかの変数宣言と代入ですか?初心者の質問で申し訳ありません。

回答:


10

答えは公式文書にあります

「@」プレフィックスは、名前付きの場所を定義します。このような場所は、通常のリクエスト処理には使用されず、リクエストのリダイレクトに使用されます。ネストすることはできず、ネストした場所を含めることもできません。


37
説明にあるように、これはまったく何も言いません。
ステファノボリーニ

だから、これは内部に通常のブロックを持つことに特に違いはありませんか?
ジェームズ

14

質問で引用した例では:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

着信要求がhttp:// your-domain / somewhereで受信された場合、場所は/ somewhereに一致し、try_filesディレクティブで指定された応答を見つけるために2か所で順番に試行し、最初の成功した試行で応答します。

  1. 最初に、/ somewhereの場所にファイルがあるかどうかをテストし、ファイルが存在する場合は応答で返されます。
  2. これが失敗すると、try_filesフォールバックオプション@defaultが試行されます。これはnamed_locationと呼ばれます。このnamed_locationの応答は、location @defaultディレクティブによって指定されます。named_locationは着信要求に一致することはありません、そして他の位置指令に応答を指定するために参照によって使用されます。

このようにして、ifステートメントを回避できます(ファイルが存在する場合はそれを使用し、そうでない場合はlocation @defaultディレクティブで指定されたとおりに応答します)。したがって、if条件の省略形として使用できます。「if」ステートメントは、nginxの作成者によって間違いなく「眉をひそめられ」ます(ifがevilの場合

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.