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处理并发请求的能力,在实际应用中得到了广泛应用。