設定ファイルに設定した場合、違いに気付かない
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
または:
fastcgi_param SCRIPT_FILENAME $request_filename;
彼らはそれぞれ何をしますか?2つのうちの1つは他よりも優れていますか?
前もって感謝します。
設定ファイルに設定した場合、違いに気付かない
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
または:
fastcgi_param SCRIPT_FILENAME $request_filename;
彼らはそれぞれ何をしますか?2つのうちの1つは他よりも優れていますか?
前もって感謝します。
回答:
ドキュメントの内容は次のとおりです。
この変数は、ルートまたはエイリアスとURIリクエストのディレクティブから形成された、現在のリクエストのファイルへのパスと同じです。
この変数は、現在のリクエストのディレクティブルートの値と同じです。
この変数は、URIリクエストと等しいか、URIがスラッシュで終わる場合、URIリクエストにfastcgi_indexで指定されたインデックスファイルの名前を加えたものになります。SCRIPT_FILENAMEとPATH_TRANSLATEDの両方の代わりにこの変数を使用することができ、特にPHPでスクリプトの名前を決定するために使用されます。
ここに書いたように、fastcgi_indexまたはfastcgi_split_path_infoを使用する場合、少なくとも違いがあります。たぶんもっとある...それは私が今知っていることです。
リクエスト/info/
を取得し、次の構成があります。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
SCRIPT_FILENAME
等しくなりますが/home/www/scripts/php/info/index.php
、それを使用$request_filename
するだけです/home/www/scripts/php/info/
。
の構成fastcgi_split_path_info
も重要です。詳細については、http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_infoを参照してください。
fastcgi_split_path_info
の微調整が必要かもしれません。Steely Wingの答えは、ドキュメントではなく、経験にのみ基づいているようです。
fastcgi_split_path_info
2つのキャプチャの外にエイリアスプレフィックスを配置するように調整してみましたが、効果はないようです。一方、別名を使用するかどうかに関係なく、$request_filename
として渡すことSCRIPT_FILENAME
は魅力のように機能します。
SCRIPT_FILENAME
場合、最初に2つの文字列を連結することを提案する理由さえ理解できません$request_filename
。上記の例は実際には正しくあり$request_filename
ません。実際には、ファイルが明示的に要求されていなくても、単なるパスではなくファイル名が含まれているためです。少なくとも昨日の時点での私の結論です。
私が使用することを推奨$request_filename
するためにSCRIPT_FILENAME
。
root
ディレクティブを使用する場合$document_root$fastcgi_script_name
に等しい$request_filename
。
alias
ディレクティブを使用する場合$document_root$fastcgi_script_name
はに$fastcgi_script_name
関連するパスではなく、URLのパスであるため、間違ったパスを返します$document_root
。
設定がある場合
location /api/ {
index index.php index.html index.htm;
alias /app/www/;
location ~* "\.php$" {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
/api/testing.php
:$document_root$fastcgi_script_name
== /app/www//api/testing.php
$request_filename
== /app/www/testing.php
/api/
:$document_root$fastcgi_script_name
== /app/www//api/index.php
$request_filename
== /app/www/index.php
を使用する場合$request_filename
、index
ディレクティブを使用してインデックスを設定する必要がありますが、機能しfastcgi_index
ません。
これらの行は「fastcgi_params」ファイルから取られたと思います。
基本的SCRIPT_FILENAME
に、vhostファイルでルートディレクティブを定義したときに既に定義されているため、エラーが発生することはありません 。そのため、vhostファイルで明示的に定義した場合を除きfastcgi_param
、の値を使用SCRIPT_FILENAME
してrootディレクティブから取得されます。リクエストをphpサーバーに送信するためにnginxが必要とする別の変数があります。これは$fastcgi_script_name
、URLの繰り返しや、スラッシュで終わるURIのエラーを避けるために適切に定義する必要があります。
結論:
すべてが非常にうまく機能するように、誰もがSCRIPT_FILENAME
/ etc / nginxフォルダーにある「fastcgi_params」ファイルで明示的に定義するか、phpロケーションブロックに次の行を含めることにより、sites-availableフォルダーにあるサイトのvhostで簡単に定義する必要があります:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
または、先ほど書いたように 'fastcgi_params'ファイルに含まれていますが、どちらの場合も同じです。
https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
それが将来の誰かを助けることを願っています。それを理解するのに多くの時間がかかったからです。