現象確認
- 靜態 HTML 正常
phpinfo() 頁面 HTTP 200 但內容為空
- 無任何 PHP 錯誤訊息輸出
核心修正:Nginx 設定補全
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# 必須明確定義(預設 fastcgi_params 不包含)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
替代方案:擴充 fastcgi_params
# /etc/nginx/fastcgi_params 追加
# PHP --enable-force-cgi-redirect 時需求
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
完整排查清單
| 檢查項目 | 指令/位置 | 正常值 |
| PHP-FPM 服務狀態 | systemctl status php-fpm | active (running) |
| PHP-FPM 監聽埠 | netstat -tlnp | grep 9000 | 127.0.0.1:9000 |
| Nginx 設定語法 | nginx -t | syntax is ok |
| PHP 檔案權限 | ls -l /var/www/html/ | www-data 可讀 |
| SCRIPT_FILENAME 參數 | 建立 phpinfo.php 驗證 | 顯示完整絕對路徑 |
| PHP 錯誤日誌 | /var/log/php-fpm/error.log | 無致命錯誤 |
| open_basedir 限制 | php.ini / .user.ini | 包含網站根目錄 |
PHP-FPM 設定確認
; /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
; 或 Unix socket(效能更好)
; listen = /run/php-fpm/php-fpm.sock
; 權限設定
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
; 進程管理
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
快速驗證腳本
<?php
// test.php
echo "SCRIPT_FILENAME: " . $_SERVER['SCRIPT_FILENAME'] . "\n";
echo "DOCUMENT_ROOT: " . $_SERVER['DOCUMENT_ROOT'] . "\n";
echo "REQUEST_URI: " . $_SERVER['REQUEST_URI'] . "\n";
phpinfo();
?>
重啟服務生效
nginx -t && systemctl reload nginx
systemctl restart php-fpm