設定ファイルに設定しても違いに気付かない
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
または:
fastcgi_param SCRIPT_FILENAME $request_filename;
彼らはそれぞれ何をしますか? 2つのうちの1つは他よりも優れていますか?
前もって感謝します。
ドキュメントの内容は次のとおりです。
この変数は、現在のリクエストのファイルへのパスに等しく、ディレクティブrootまたはエイリアスとURIリクエストから形成されます。
この変数は、現在のリクエストのディレクティブrootの値と同じです。
この変数は、URIリクエストに等しいか、URIがスラッシュで終わっている場合は、URIリクエストとfastcgi_indexで指定されたインデックスファイルの名前に等しいです。特にPHPでスクリプトの名前を決定するために利用されるSCRIPT_FILENAMEとPATH_TRANSLATEDの両方の代わりにこの変数を使用することが可能です。
ここに書かれているように、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
_$request_filename
_には_SCRIPT_FILENAME
_の使用をお勧めします。
root
ディレクティブを使用している場合_$document_root$fastcgi_script_name
_は_$request_filename
_と同じです。
alias
ディレクティブを使用している場合_$document_root$fastcgi_script_name
_はURLのパスであり、_$fastcgi_script_name
_に関連するパスではないため、_$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ファイルでルートディレクティブを定義したときに既に定義されているため、エラーは発生しません。したがって、fastcgi_param
を使用してvhostファイルで明示的に定義しない限り、SCRIPT_FILENAME
の値はrootディレクティブから取得されます。ただし、ここで重要なポイントが1つあります。 nginxが$fastcgi_script_name
であるphpサーバーにリクエストを送信するために必要な別の変数があり、スラッシュで終わるURIの反復URLとエラーを回避するために、それをうまく定義する必要があります。
結論:
すべてが非常にうまく機能するように、誰もがSCRIPT_FILENAME
を/ etc/nginxフォルダーにある 'fastcgi_params'ファイルに明示的に定義するか、次の行をphpロケーションブロック:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
または、上記で記述したように「fastcgi_params」ファイルに含まれています。どちらの方法でも同じです。ngnixをPHP-FPMに接続するための詳細については、次のURLにアクセスしてください。
https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
私はそれが将来的に誰かを助けることを願っています。