CGI:Common Gateway Interface,Web Server 與動態腳本的橋樑。
FastCGI:常駐進程模式,避免每請求 fork 新進程,效能大幅提升。
Nginx 透過 Socket(TCP 或 Unix Domain Socket)將動態請求轉發給 PHP-FPM(FastCGI Process Manager),PHP-FPM 管理 Worker 池解析腳本,結果原路返回。
./configure --enable-fpm --enable-cgi ...
--enable-fpm:內建 FastCGI 進程管理器(PHP 5.3.3+)。--enable-cgi:支援 CGI/FastCGI SAPI。phpize,缺 autoconf 會失敗。主配置檔:/usr/local/php/etc/php-fpm.conf(或 php-fpm.d/www.conf)。核心設定:
listen = /tmp/php-fpm.sock(Unix Socket,效能優於 TCP)pm = dynamic、pm.max_children、pm.start_servers 等進程池參數。request_terminate_timeout、slowlog 等除錯設定。location ~ \.php$ {
root html;
fastcgi_pass unix:/tmp/php-fpm.sock; # 對應 php-fpm.conf listen
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; # 包含標準 PARAM 定義
}
fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS $https if_not_empty;
SCRIPT_FILENAME 路徑錯誤,確認 $document_root 與 root 指令一致。