提到 Web 服務器代理,很多人都會想到阿帕奇(Apache),但現在越來越多的人開始使用 Nginx(engine x)。Nginx 是一款高性能的 Web 服務器,尤其對于高并發、低CPU負載的場景表現尤為優秀。而 PHP-FPM 則是 PHP 的 FastCGI 進程管理器,可以幫助管理員和開發者更好地管理和控制 PHP 進程集群。
相比 Apache,Nginx 使用了事件驅動、非阻塞處理 I/O 的機制,資源消耗更小,而對于靜態資源的處理更快,可以更好的支撐高訪問量網站。這種特點尤其能夠體現在 Nginx 配置 PHP-FPM 時,這樣就可以更好地擔當分發任務了。
location ~ \.php$ { fastcgi_pass unix:/run/php/php7.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Nginx 的配置非常靈活,可以配合虛擬主機、域名解析及 SSL 等多方面進行適配。使用 Nginx + PHP-FPM 的好處在于將請求動態資源的壓力分擔到 PHP-FPM 進程中,這樣 Nginx 僅需要處理靜態資源的請求,PHP-FPM 可以負責處理動態資源請求。Nginx 可以通過啟用 TCP/IP 連接 FastCGI 進行請求轉發,也可以使用 Unix domain socket。
PHP-FPM 作為一種應用程序并行處理技術,可以管理多個 PHP 進程,這些進程通常是在后端運行的,它們可以共享一個 FastCGI 套接字或者監聽不同的套接字(在本地或者遠程)。如下所示:
pm = dynamic pm.max_children = 15 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
使用 PHP-FPM,并通過其配置參數進行進程管理,可以使 PHP 進程更加穩定和可控。如果在不需要處理大量并發的情況下,可以通過將代理進程的數量調整為 0 來停止 PHP-FPM 進程。
總之,Nginx + PHP-FPM 的組合是一種非常優秀的方案。在大部分情況下,它比 Apache + mod_php 或其他方案表現得更優秀。當然這里只是一個簡單的入門級博客,更高階和圖文豐富的教程博客我們會在后續內容中陸續介紹。