安裝 Nginx 後,HTML 正常顯示,PHP 檔案回傳空白頁面(HTTP 200),Nginx 與 PHP-FPM 日誌皆無錯誤。
Nginx 未向 FastCGI 進程傳遞 SCRIPT_FILENAME 參數,PHP 解析器無法得知要執行的腳本路徑。
根據 Nginx 官方文件,PHP 至少需要兩個參數才能運作:
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string;
?a=1&b=2)location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# /etc/nginx/fastcgi_params fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param REDIRECT_STATUS 200;
| 變數 | 含義 | 範例值 |
|---|---|---|
| $document_root | root 指令指定的根目錄 | /var/www/html |
| $fastcgi_script_name | 請求的 PHP 腳本路徑 | /index.php |
| 組合結果 | 完整腳本絕對路徑 | /var/www/html/index.php |
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; — 遷移部署時會失效include fastcgi_params 之後 — 會被後者覆蓋$document_root$fastcgi_script_name 動態組合 — 可攜性最佳<?php // 臨時建立 debug.php 驗證參數傳遞 var_dump($_SERVER['SCRIPT_FILENAME']); var_dump($_SERVER['REQUEST_URI']); ?>
正確應顯示完整絕對路徑,如 /var/www/html/debug.php。