Nginx設定編⑤locationディレクティブを読む。Linuxサーバ構築手順まとめ
Nginx設定編⑤locationディレクティブを読む。Linuxサーバ構築手順まとめ
今回は、Nginxのlocationディレクティブをみていきます!
本連載では、Linux上で様々なサーバソフトウェアのインストール手順、操作・設定方法を解説していきます。嵌まりそうなポイントや細かい部分の説明していきます。Linuxでサーバ構築する際の参考にして下さい。
前回の「Nginx設定編④serverディレクティブを読む。Linuxサーバ構築手順まとめ」でserverディレクティブの内容を細かく見ていきました。locationディレクティブについては後回しにしていたのですが、今回はそのlocationディレクティブを見ていきたいと思います。main,http,serverディレクティブと、だんだん細かくなってきたディレクティブ読解ですが、とうとうlocationディレクティブです。今回も設定項目が沢山出てきますが、頑張りましょう。
locationディレクティブのフォーマット
locationディレクティブの選択ルール
locationディレクティブはブロックディレクティブで、同一serverコンテクスト内に複数記述することが可能です。
どのlocationディレクティブ内の設定を有効にするかは、リクエストURIによって決まります。
locationディレクティブに記述した文字列(URI)または正規表現に、リクエストがマッチした場合に、そのlocationディレクティブ内の設定を有効にします。
まず次のルールでリクエストURIを整形します。
・「/」が連続していた場合は1つにまとめます。
・相対パスはドキュメントルートパスにまとめます。
・HTMLエンコードされた文字列はデコードします。
こうして整形されたURIを以下の順序でlocationにマッチするか判定していきます。
locationで指定する文字列の前に、次の4つのモディファイアを指定することができます。
「 = 」「 ~ 」「 ~* 」「 ^~ 」
このモディファイアは、次のマッチ判定手順で登場しますが、それぞれ意味があります。
1.最初に前方一致検索のlocationを評価します。
・ここでは、一致文字列の最長のものが選択されます。
・最長のもので「^~」モディファイアが指定されている場合、この後の正規表現は行いません。
・完全一致で「=」モディファイアが指定されている場合、ここで検索は終了します。
2.次に正規表現のlocationを評価します。
・複数記述がある場合は、記述順に評価します。
・正規表現は修飾語句「~*」「~」の後ろに記述されます。
・「~*」は大文字・小文字を区別せず、「~」は区別します。
・一致したら終了し、そのlocationが使用されます。
・一致する正規表現がない場合、1の前方一致検索で最初に一致したlocationが採用されます。
結構面倒くさいルールですが、4つのモディファイアを理解してしまえば、比較的直観的に理解できる設定になっていると思います。
locationディレクティブの記述例
それでは上記のルールを踏まえ、次のような記述を例にとってlocationの採用フローを考えましょう。
location = / { [ 設定 A ] } location / { [ 設定 B ] } location /documents/ { [ 設定 C ] } location ^~ /images/ { [ 設定 D ] } location ~* .(gif|jpg|jpeg)$ { [ 設定 E ] }
リクエストURIが「/」の時、設定Aになります。
リクエストURIが「/index.html」の時、設定Bになります。
リクエストURIが「/documents/document.html」の時、設定Cになります。
リクエストURIが「/images/XXX.gif」の時、設定Dになります。
リクエストURIが「/documents/XXX.jpg」の時、設定Eになります。
リクエストURIが「/archives/XXX.html」の時、設定Aになります。
locationディレクティブにより、リクエストに応じて設定を変更できることが見て取れるかと思います。