next up previous contents
Next: 3.1.2 変数、値、文字列 Up: 3.1 Nginxの基本構文 Previous: 3.1 Nginxの基本構文

3.1.1 コンテキスト

正確には、コンテキストには以下の6種類があります。

継承では、必ず上位から下位に継承なされ、同位のものに継承が行われることや、 上位に影響することはありません。

これを、以下の例で見て見ましょう。

server {
    server_name hoge;
    root /home/pub;
    location /app {
        root /usr/www;
    }
    location /app2 {
    }
}

ここで、Apache ではシステム上のファイルや、ディレクトリが対象で、 それらがURLに対してどのような位置づけになるかが記述されますが、 nginx では URL が常にその対象となる点を覚えておいて下さい。

まず、nginx での root は、Apache の DocumentRoot に相当します。 そういう意味では、root は nginx にあっては少し特殊なディレクティブに なり、与えられたURLに対して、どのディレクトリからその対象を探すかという ことを定義します。

上の例では、 server ブロックに root /home/pub がありますので、 これがそれぞれの location ブロックに継承されますが、location /app ブロックでは、これをオーバーライドして root /usr/www に変更して いますので、location /app の root は /usr/www で、 一方、location /app2 では root は /home/pub になります。

以上のことから、http://hoge/app/index.html/usr/www/app/index.html にヒットし、
http://hoge/app2/index.html/home/pub/app2/index.html にヒットする訳です。

但し、action ディレクティブはオーバーライドせずに、両方が実行されます。 action ディレクティブの代表が rewrite ですが、これは後で取り上げます。

一方、location ブロックは、入れ子にすることも可能です。

server {
    location / {
        index index.html;
        location ~ \.php$ {
            index index.php;
        }
    }
}

あまり意味のない例ですが、内部の location は正規表現で指定しており、 拡張子が .php が指定されているURLにマッチします。



Noriyo Kanayama