PHP FastCGI,是一種讓PHP腳本與Web服務器之間進行更高效通訊的機制。與傳統模式不同的是,FastCGI的進程會一直保持運行,而不會在每一次請求完成后都被銷毀。這樣可以避免頻繁的進程創建和銷毀,節省服務器資源。另外,使用PHP FastCGI也可以提高處理并發請求的能力。
在Apache中啟用FastCGI模式,需要安裝一個額外的模塊,如mod_fcgid。在Nginx中,則可以直接使用FastCGI模塊。
# Apache + mod_fcgid LoadModule fcgid_module modules/mod_fcgid.so # Nginx location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/php-fpm.sock; ... }
啟用FastCGI后,可以發現PHP進程已經不再是直接由Apache或Nginx進程啟動了,而是由FastCGI進程啟動的。我們可以使用命令`ps aux | grep php-cgi`查看當前正在運行的PHP FastCGI進程:
[root@localhost ~]# ps aux | grep php-cgi root 21202 0.1 0.0 130044 1660 pts/0 S+ 21:41 0:00 grep php-cgi apache 30467 0.0 0.5 729936 23996 ? S 20:42 0:06 /usr/bin/php-cgi apache 30468 0.0 0.5 729936 23996 ? S 20:42 0:06 /usr/bin/php-cgi apache 30469 0.0 0.5 729936 23996 ? S 20:42 0:06 /usr/bin/php-cgi ...
在上述例子中,Apache進程啟動了多個PHP FastCGI進程來處理請求。
另外,FastCGI還支持使用Unix域套接字(unix socket)或TCP/IP套接字(TCP/IP socket)進行通訊。使用Unix域套接字可以避免TCP/IP的網絡開銷,提高效率。假設我們在Nginx中使用Unix域套接字,配置如下:
location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; ... }
另外,FastCGI還支持與其他語言的Web服務器通訊,如Python、Ruby等。
綜上所述,PHP FastCGI是一種高效的通訊機制,可以提高PHP處理并發請求的能力,在實際應用中得到了廣泛應用。