Nginx(發音為 "engine x")是一款高效能的 HTTP 與反向代理伺服器,同時也支援 IMAP/POP3/SMTP 郵件代理功能。由 Igor Sysoev 為俄羅斯第二大門戶網站 Rambler.ru 開發,並以類 BSD 授權條款釋出原始碼。儘管早期屬於測試版本,Nginx 憑藉其穩定性、豐富功能、範例配置檔案及極低系統資源消耗,迅速在業界建立聲譽。
本文記錄 W3CGROUP 成功部署 Nginx + PHP Web 伺服器的完整流程,涵蓋多域名多站點配置,並有效避免 502 Bad Gateway 錯誤。測試環境基於 CentOS 4.7(Linux 2.6.9),軟體版本包含 Nginx 0.6.35、PHP 5.2.9(含 FPM 补丁)、MySQL 5.1.34 及相關依賴庫。
依序安裝 libiconv、libmcrypt、mhash、mcrypt,並建立必要的符號連結至 /usr/lib,確保 PHP 編譯時能正確找到庫檔案。
建立 mysql 用戶與群組,採用 --prefix=/usr/local/webserver/mysql 等參數編譯安裝,啟用 InnoDB、SSL、大表支援等企業級特性。安裝完成後調整目錄權限。
套用 FPM 补丁後,使用豐富的 ./configure 參數編譯,啟用 FastCGI、FPM、多字節字串、GD 圖形庫、OpenSSL、mcrypt、mhash、LDAP、Sockets 等模組。編譯時加入 ZEND_EXTRA_LIBS='-liconv' 解決圖示庫連結問題。
採用 XML 格式配置檔,設定全域選項(PID 檔案、錯誤日誌、日誌等級、緊急重啟閾值等)與工作池參數(監聽 127.0.0.1:9000、靜態進程管理、最大子進程 128、請求終止超時、慢日誌、資源限制、允許客戶端 IP 等)。
groupadd www、useradd -g www www,供 Nginx 與 PHP-FPM 以低權限運行。
預設安裝至 /usr/local/nginx,或指定 --prefix=/usr/local/webserver/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module 等參數編譯安裝。
定義 FastCGI 參數對應(SCRIPT_FILENAME、REQUEST_URI、SERVER_NAME 等),並設定 REDIRECT_STATUS 200 以相容 PHP 的 --enable-force-cgi-redirect 編譯選項。
server 區塊分別對應 www.v-ec.com 與 www.w3cgroup.com,根目錄置於 Nginx html 目錄下,PHP 請求轉發至 127.0.0.1:9000,靜態資源設定快取策略(圖片 30 天、JS/CSS 6 小時),並啟用自訂 access_log 格式編輯 /etc/rc.local,加入 ulimit -SHn 51200、啟動 php-fpm 與 nginx。
修改 /etc/sysctl.conf,調整 TCP 連線回收、重用、SYN Cookie 等參數,執行 /sbin/sysctl -p 立即生效。
ps aux | grep nginx 找到 master PID,執行 kill -HUP <PID>/usr/local/webserver/php/sbin/php-fpm restart,支援 start/stop/quit/reload/logrotate 等指令完成上述步驟並重啟系統後,即可擁有一套高效能、多站點支援的 Nginx + PHP Web 伺服器環境。本文為實測總結,歡迎轉載註明出處。