Nginx 未正確傳遞 SCRIPT_FILENAME 參數給 PHP-FPM,導致 PHP 不知道要執行哪個腳本檔案。
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# 關鍵:必須在 include fastcgi_params 之前定義
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
官方 fastcgi_params 僅包含通用參數,不含 SCRIPT_FILENAME。此參數由部署環境決定,必須在站點設定中明確指定。
| 參數 | 用途 | 必要性 |
|---|---|---|
| SCRIPT_FILENAME | PHP 腳本絕對路徑 | ✅ 必須 |
| QUERY_STRING | 查詢字串 | ✅ 必須 |
| REQUEST_METHOD | HTTP 方法 | 建議 |
| CONTENT_TYPE | 請求內容型別 | 建議 |
| CONTENT_LENGTH | 請求內容長度 | 建議 |
# /etc/nginx/fastcgi_params 追加 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param REDIRECT_STATUS 200; # PHP --enable-force-cgi-redirect 時需求
phpinfo.php:<?php phpinfo(); ?>$_SERVER['SCRIPT_FILENAME'] 是否為正確絕對路徑systemctl status php-fpmopen_basedir 限制:檢查 php.ini 設定display_errors=Off:啟用錯誤日誌 log_errors=On