静的コンテンツの提供


静的コンテンツの提供

このセクションでは、静的コンテンツの提供の仕方と、パスをそれらの静的コンテンツのに向けるのとは違う方法で静的コンテンツを提供する方法と、インデックスファイルを設定する方法を説明します。

ルートディレクトリとインデックスファイル

root ディレクティブは、ファイルを探すのに使われるルートディレクトリを指定します。リクエストされたファイルのパスを取得するために、NGINXはrootで指定されたパスにリクエストされたURIを追加します。ディレクティブは http, serverまたは location コンテキストの全てのレベルに配置することができます。下の例では、root ディレクティブがバーチャルサーバのために定義されます。rootが再定義されていない全てのlocationで、それは適用されるでしょう:

server {
    root /www/data;

    location / {
    }

    location /images/ {
    }

    location ~ \.(mp3|mp4) {
        root /www/media;
    }
}

ここで、/images/some/path URI はファイルシステム上の/www/data/images/some/path にマップされ、NGINXはそこでファイルを取得しようとするでしょう。/any/path/file.mp3のようなURIのリクエストは、対応するlocationが自身のrootを定義するため、/www/media/any/path/file.mp3にマップされるでしょう。

リクエストがスラッシュで終わる場合は、NGINXはそれをディレクトリへのリクエストして扱い、そこにインデックスファイルがあるか調べようとするでしょう。インデックスファイルの名前はindex ディレクティブで指定され、デフォルトの値は index.htmlです。上の例では、URI /images/some/path/ へのリクエストは、NGINXは/www/data/images/some/path/index.html ファイルが存在すれば、それを返すでしょう。ファイルが存在しない場合、デフォルトでは404エラーが返るでしょう。しかしながら、autoindex ディレクティブを onに設定することで、ファイルが存在しないときには自動的に生成したディレクトリのリストを返すことができます。

location /images/ {
    autoindex on;
}

index ディレクティブには一つ以上のファイル名を書くことができます。それぞれのファイルが列挙されている順番でチェックされ、最初に見つかったものが返されるでしょう。

location / {
    index index.$geo.html index.htm index.html;
}

ここで$geo 変数は、geo ディレクティブで設定されたカスタム変数です。変数の値はクライアントのIPアドレスによります。

インデックスファイルを返すために、NGINXはファイルの存在をチェックし、インデックスファイル名とそのベースURIから取得したURIへ内部リダイレクトします。内部リダイレクトは結局新しいlocationの検索になり、最後には以下の例のように他のlcoationになりえます。

location / {
    root /data;
    index index.html index.php;
}

location ~ \.php {
    fastcgi_pass localhost:8000;
    ...
}

ここで、もしリクエストが/path/URIで、/data/path/index.htmlが存在しないが /data/path/index.php が存在することが分かった場合は、 /path/index.phpへの内部リダイレクトが二つ目のlocationにマップされるでしょう。結果として、リクエストはプロキシされるでしょう。

幾つかの選択の試み

try_files ディレクティブは指定されたファイルまたはディレクトリが存在するかどうかチェックし、内部リダイレクトするかまたは存在しない場合は特定のステータスコードを返します。例えば、リクエスト URIに対応するファイルの存在をチェックするには、try_filesディレクティブと $uri 変数を以下のように使います:

server {
    root /www/data;

    location /images/ {
        try_files $uri /images/default.gif;
    }
}

ファイルはURIの形式で指定され、現在のlocationまたはバーチャルサーバのコンテキストで設定されたroot あるいは alias ディレクティブを使って処理されます。この場合、最初のURIに対応するファイルが存在しない場合、NGINXは最後のパラメータが返す/www/data/images/default.gifで指定されるURIへ内部リダイレクトします。

最後のパラメータはステータスコード(=の後に指定します)あるいはlocationの名前でも可能です。次の例では、存在するファイルやディレクトリとなる選択肢がない場合に、404エラーが返されます。

location / {
    try_files $uri $uri/ $uri.html =404;
}

次の例では、最初のURIも後ろにスラッシュを付けたURIも存在するファイルやディレクトリにならない場合に、リクエストはプロキシされたサーバに渡される名前付きのlocationにリダイレクトされます。

location / {
    try_files $uri $uri/ @backend;
}

location @backend {
    proxy_pass http://backend.example.com;
}
TOP
inserted by FC2 system