Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 安裝 Nginx + PHP 7.0 (PHP-FPM) 完整配置指南:Socket 與 TCP 雙模式通信詳解

編輯:Linux 系統常見問題解答

架構關係圖解

Nginx 充當「轉發官」:接收 HTTP 請求 → 根據 location 規則匹配 .php → 轉發給 PHP-FPM (FastCGI Process Manager)。
PHP-FPM 充當「調度員」:管理 PHP Worker 進程池 → 接收請求 → 派發空閒 Worker 執行腳本 → 返回結果給 Nginx。
溝通方式:listen 指令定義的 Socket 文件 (Unix Domain Socket) 或 TCP 端口 (127.0.0.1:9000)。

安裝步驟 (Debian/Ubuntu 系統,apt 方式)

# 更新索引並安裝 Nginx
sudo apt update && sudo apt install nginx

# 安裝 PHP 7.0 FPM 及常用擴展
sudo apt install php7.0-fpm php7.0-mysql php7.0-common php7.0-curl php7.0-cli php7.0-mcrypt php7.0-mbstring php7.0-dom php7.0-xml php7.0-gd php7.0-zip

# 多裝常用擴展預防後續報錯,缺什麼再補裝即可

核心配置:Nginx 與 PHP-FPM 通信對接

1. 確認 PHP-FPM 監聽方式

編輯 /etc/php/7.0/fpm/pool.d/www.conf (CentOS/編譯安裝路徑可能為 /etc/php-fpm.d/www.conf):

; 方式 A:Unix Socket (推薦,本機通信性能更高、無 TCP 開銷)
listen = /run/php/php7.0-fpm.sock
; 權限設置 (Nginx 進程用戶需可讀寫)
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

; 方式 B:TCP 端口 (適合 Nginx 與 PHP-FPM 分離部署)
; listen = 127.0.0.1:9000

記住 listen 的值,Nginx 必須完全一致。

2. 配置 Nginx 虛擬主機 FastCGI 轉發

編輯 /etc/nginx/sites-enabled/default (或站點配置文件) server {} 塊內:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;  # 內含 fastcgi_param 標準參數
    
    # 方式 A:對應 Unix Socket
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    
    # 方式 B:對應 TCP 端口 (二選一,取消註釋對應行)
    # fastcgi_pass 127.0.0.1:9000;
}

3. 權限與目錄映射關鍵點

  • Nginx 與 PHP-FPM 進程用戶需一致 (通常 www-data) 或至少有同組權限。
  • 網站根目錄 (root /var/www/html;) 需被 PHP-FPM 進程可讀取。
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 必須正確映射腳絕對路徑 (通常在 fastcgi-php.conf 中已定義)。

驗證與測試

  1. 重啟服務:sudo systemctl restart php7.0-fpm nginx。
  2. 創建測試文件:echo '' | sudo tee /var/www/html/info.php。
  3. 瀏覽器訪問 https://your-server-ip/info.php,應顯示 PHP 7.0 信息頁面。
  4. 測試完成後 立即刪除 info.php 防洩露信息。

常見故障排查表

現象原因解決
502 Bad GatewayNginx 連不上 PHP-FPM檢查 listen 路徑/端口是否一致、Socket 文件權限、PHP-FPM 進程是否運行
File not found / Primary script unknownSCRIPT_FILENAME 映射錯誤確認 root 指令、fastcgi_param SCRIPT_FILENAME、chroot 設置
權限拒絕目錄/文件權限不足chown -R www-data:www-data /var/www/html; chmod 755 目錄 / 644 文件
變更不生效未重啟對應服務systemctl reload php7.0-fpm nginx

生產環境優化建議

  • Unix Socket + 獨立用戶/組:每個站點獨立 PHP-FPM Pool (如 pool.d/site1.conf),不同用戶運行,實現隔離。
  • OPcache 啟用:opcache.enable=1、opcache.memory_consumption=128、opcache.validate_timestamps=0 (生產環境需手動清理或部署時重啟)。
  • 進程管理模式:pm = dynamic (按需啟動) 或 pm = static (固定進程數,高併發穩定)。
  • 慢日誌:slowlog = /var/log/php-fpm/$pool-slow.log、request_slowlog_timeout = 5s。
Copyright © Windows教程網 All Rights Reserved