nginx が php ファイルを見つけられない問題の解決策: 1. root 命令をサーバー ブロックに配置し、各場所が親サーバー ブロックで定義された documentroot を継承するようにします; 2. nginx が存在しないファイルをインターセプトします[try_files] を使用します。存在しない URL をキャッチし、エラーを返します。
nginx は php ファイルの解決策を見つけることができません:
1. 間違ったパスが送信されますphp-fpm プロセス
# に移動します。このようなエラーが発生する場合、10 のうち 9 は、バックエンドの fastcgi プロセスが間違ったパス (SCRIPT_FILENAME) を受信することが原因です。 fastcgi プロセスが間違ったパスを受け取るのは、主に構成エラーが原因です。
一般的な nginx.conf の設定は次のとおりです:
server { listen [::]:80; server_name example.com www.example.com; access_log /var/www/logs/example.com.access.log; location / { root /var/www/example.com; index index.html index.htm index.pl; } location /images { autoindex on; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/example.com$fastcgi_script_name; include fastcgi_params; } }
この設定には多くの不合理な点があります。明らかな問題の 1 つは、root ディレクティブが location / に配置されていることです。 ## #ピース。ルート ディレクティブが location ブロックで定義されている場合、ルート ディレクティブは、それが配置されている場所でのみ有効になります。他の場所にはルート ディレクティブがありません。たとえば、location /images ブロックはどのリクエストにも一致しません。この問題を解決するには、リクエストごとにルート ディレクティブを繰り返し構成する必要があります。
server ブロックに配置する必要があります。ある場所で別のドキュメントルートを定義する必要がある場合は、場所の場合 場所で別の document_root を定義する必要がある場合は、その場所で別のルート ディレクティブを定義できます。
SCRIPT_FILENAME がハードコーディングされていることです。ルート ディレクティブの値を変更するか、ファイルを別のディレクトリに移動すると、php-fpm は「入力ファイルが指定されていません」エラーを返します。これは、
SCRIPT_FILENAME が構成内でハードコーディングされており、# に従わないためです。 ## $document_root
は変更に応じて変更されます。SCRIPT_FILENAME 構成を次のように変更できます: <pre class="brush:php;toolbar:false">fastcgi_param SCRIPT_FILENAME documentrootdocumentrootfastcgi_script_name;</pre>
したがって、サーバー ブロック内のルート ディレクティブを構成することを忘れてはなりません。それ以外の場合は、値がdocumentroot に渡される値が空の場合、
fastcgi_script_name のみが php-fpm に渡され、「入力ファイルが指定されていません」エラーが発生します。
nginx が存在しない .php ファイルに対する要求を受信した場合、nginx は$uri が .php で終わるかどうかだけをチェックし、ファイルが存在するかどうかは判断しません .php で終わる nginx リクエストは、直接 php-fpm に送信されて処理されます。 php-fpm の処理中にファイルが見つからない場合は、「404 Not Found」ヘッダーとともに「入力ファイルが指定されていません」が返されます。
解決策
nginx に存在しないファイルをインターセプトし、カスタム 404 エラーをリクエストして返します
try_files を使用して存在しない URL をキャプチャし、エラーを返します。 <pre class="brush:php;toolbar:false">location ~ .php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME ....
...................................
...................................
}</pre>
上記の設定では .php ファイルが存在するかどうかがチェックされ、存在しない場合は 404 ページが返されます。
PHP プログラミングの入門から熟練度まで
以上がnginx が php ファイルを見つけられない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。