首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP + FastCGI + Nginx 運行環境配置原理與實作

     編輯:PHP 綜合知識

架構原理

CGI:Common Gateway Interface,Web Server 與動態腳本的橋樑。
FastCGI:常駐進程模式,避免每請求 fork 新進程,效能大幅提升。
Nginx 透過 Socket(TCP 或 Unix Domain Socket)將動態請求轉發給 PHP-FPM(FastCGI Process Manager),PHP-FPM 管理 Worker 池解析腳本,結果原路返回。

優勢

  • Web Server 與解釋器解耦,可分離部署、獨立擴容。
  • Nginx 專注靜態資源與反向代理,PHP-FPM 專注腳本執行。
  • 安全性:腳本錯誤不會導致 Nginx 崩潰。

PHP 編譯關鍵參數

./configure --enable-fpm --enable-cgi ...
  • --enable-fpm:內建 FastCGI 進程管理器(PHP 5.3.3+)。
  • --enable-cgi:支援 CGI/FastCGI SAPI。
  • 擴展編譯需 phpize,缺 autoconf 會失敗。

PHP-FPM 配置

主配置檔:/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 等除錯設定。

Nginx FastCGI 配置

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_params 關鍵參數

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;

常見問題

  • File not found:SCRIPT_FILENAME 路徑錯誤,確認 $document_root 與 root 指令一致。
  • Permission denied:Socket 檔案權限,Nginx worker 使用者需可讀寫。
  • 502 Bad Gateway:PHP-FPM 未啟動、Socket 路徑不符、進程數耗盡、腳本執行超時。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved