73

Nginx のtry_filesディレクティブがどのように機能するかを理解しようとしています。Nginx は私のサーバーで実行されており、にあるデフォルトのページを提供しています/usr/share/nginx/html/index.html

ただし、ファイルシステムの に単純な HTML ページがあります/var/www/test/index.html。次の構成ファイルでは、そのファイルが提供されません。なぜそうしないのか、そしてそれが提供されるようにするためにどのような変更を加える必要があるのか​​ を理解したいと思います.

の関連部分は次のdefault.confとおりです。

server {
    listen       80;
    server_name  localhost;

    root  /var/www;
    try_files /test/index.html /;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
4

1 に答える 1

235

条件に適用できる非常に一般的な try_files 行は

location / {
    try_files $uri $uri/ /test/index.html;
}

たとえば、最初の部分はlocation /、より具体的な場所に一致しない限り、すべての場所に一致することをおそらく理解しています。location /test

2 番目の部分 ( the try_files) は、このブロックに一致する URI を受け取ったときに$uri最初に試行することを意味します。たとえば、 nginxはhttp://example.com/images/image.jpg内部にファイルがあるかどうかを確認しようとします。/imagesimage.jpg

2 番目の条件は$uri/、最初の条件が見つからなかった場合に URI をディレクトリとして試すことを意味し$uriますhttp://example.com/images/。呼び出されたものが存在する場合、それを提供しようとします。images$uri/images

補足: ディレクトリの一覧表示はデフォルトで禁止されているため、持っていないautoindex on場合は、おそらく 403 禁止エラーが発生します

編集index:定義した場合、nginxはディレクトリのリストを試みる前に、このフォルダー内にインデックスが存在するかどうかを確認しようとすることを忘れていました。

3 番目の条件/test/index.htmlはフォールバック オプションと見なされます (1 つとフォールバックの少なくとも 2 つのオプションを使用する必要があります)。できる限り多くのオプションを使用できます (以前に制約を読み取ったことがありません)。nginx はindex.html内部のファイルを探します。フォルダーtestが存在する場合はそれを提供します。

3 番目の条件も失敗した場合、nginx は 404 エラー ページを提供します。

また、このような名前付きの場所と呼ばれるものがあります

location @error {
}

try_filesこのように呼び出すことができます

try_files $uri $uri/ @error;

ヒント: 提供したい条件が 1 つだけの場合、たとえばフォルダー内imagesで画像を提供するか、404 エラーに移動するかのいずれかのみを希望する場合は、次のような行を記述できます。

location /images {
    try_files $uri =404;
}

これは、ファイルを提供するか、404 エラーを提供するかのいずれかを意味します。フォールバック オプションが必要なため、単独$uriで使用することはできません。 次のように、必要なエラー コードを選択することもできます。=404

location /images {
    try_files $uri =403;
}

画像が存在しない場合は禁止エラーが表示され、500 を使用するとサーバー エラーなどが表示されます。

于 2013-07-23T01:31:58.947 に答える