nginx try_filesディレクティブ
nginx の try_files ディレクティブについての備忘録。
Syntax
Syntax: try_files file ... uri; try_files file ... =code; Default: — Context: server, location
書かれていることを箇条書きでまとめると...
- 指定された順序で "file" の存在をチェックし(つまり複数設定できる)、最初に見つかったものを処理する。
- "file" への path は root と alias ディレクティブに従う
- 何も見つからない場合は、最後に指定した uri に内部リダイレクトする
例1
設定
server { root /usr/share/nginx/html; location /images/ { try_files $uri /images/default.gif; } location = /images/default.gif { expires 30s; } }
ディレクトリ
$ tree /usr/share/nginx/html/ /usr/share/nginx/html/ |-- 50x.html |-- images | |-- default.gif | `-- hello.gif `-- index.html
という場合に、リクエストとレスポンスの対応は以下のとおり。
リクエスト | レスポンス | 理由 |
---|---|---|
http://example.com/images/hello.gif | /images/hello.gif | $uri は /images/hello.gif となり、対象ファイルが存在するため。 |
http://example.com/images/goodbye.gif | /images/default.gif | $uri は /images/goodbye.gif となり、対象ファイルが存在しない。このため、default.gif にフォールバックする。 |
例2
server { root /usr/share/nginx/html; location / { try_files $uri $uri/index.html $uri.html =404; } }
http://example.com/hello をリクエストした場合、nginx は root(/usr/share/nginx/html)を起点に /hello, /hello/index.html, /hello.html を順に探し、見つからない場合には 404 エラーページを返す。
例3
location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; }
この例では、ファイルが見つからない場合は、@mongrel という名前付ロケーションにフォールバックする。