try_filesの個人的な理解

1267 ワード

以下のプロファイルを例にとります.
 location ~ \.php$ {
            root           html;
            try_files      $uri $uri/ =404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

try_filesの最初の'$uri'はnginxがハードディスクの対応するパスにファイルを探しに行くことを表し、見つけられる場合はlocationブロックの内容を下に実行し、つまり見つけたファイルをfastcgiに渡して実行し、見つからない場合はアクセスしたuriの後ろに'/'を追加し、ハードディスクの中で対応するディレクトリを探し続け、同じように処理します.そうでなければ、今回の要求内部を最後のパラメータにリダイレクトし、すなわち404を返す.
ここで注意すべき点はいくつかあります.
一つは訪問だsite.com/example'の場合、'$uri/'が構成されていない場合、nginxは対応するexampleファイルのみを探し、exampleディレクトリは探しません.もしあなたを訪問するなら.site.com/example/',nginxは対応するexampleディレクトリのみを探し、exampleファイルは探しません.つまりtry_がなければfilesという構成では、nginxは要求されたuriに従ってハードディスク('/'で終わる)やディレクトリ('/'で終わる)を完全に探し、勝手に'/'を追加したり削除したりしません.
二つ目はtry_filesはnginx’にファイルを探してもらうだけで、探し終わったら直接locationブロックから飛び出すのではなく、下に沿って実行され、後ろにproxy_があります.passまたはfastcgi_passは見つけたファイルを対応する場所に転送し、proxy_がありません.passまたはfastcgi_passは直接ファイルをクライアントに返します.ファイルが見つからない場合は、このリクエストの内部を最後のパラメータにリダイレクトするので、最後のパラメータは、'=404'や他のlocationにリダイレクトするなど、存在しない場合は、ループリダイレクトなどのサーバ内部の異常が発生する可能性があります.