手机版

PHP-FPM与Nginx通信机制详解

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

PHP入门-FPM

CGI协议和FastCGI协议

每种动态语言(PHP、Python等)的代码文件。)需要通过相应的解析器被服务器识别,并使用CGI协议使解释器和服务器能够相互通信。服务器上PHP文件的解析需要PHP解释器和CGI协议,这样服务器就可以解析PHP文件。

CGI的机制是为每个请求分叉一个CGI进程,然后在请求完成后杀死该进程,这在实际应用中浪费了资源,于是出现了CGI的改进版本——FastCGI。FastCGI在处理完请求后不会杀死进程,而是会继续处理多个请求,从而大大提高了效率。

什么是PHP-FPM

PHP-FPM是PHP-FastCGI流程管理器,是FastCGI的实现,提供流程管理的功能。流程包括主流程和工作流程。只有一个主进程,负责监控端口和接收服务器的请求,而一般有几个工作进程(具体数量根据实际需要配置),每个进程中嵌入一个PHP解释器,就是代码实际执行的地方。

Nginx与php-fpm的通信机制

当我们访问一个网站(如www.test.com)时,处理流程如下:

Www.test.com | | nginx | |路由到www.test.com/index.php | |加载nginx的fast-cgi模块| |fast-cgi侦听127.0.0.1:9000地址| |www.test.com/index.php请求到达127.0.0.1:9000 | |等待处理.

Nginx和php-fpm的结合

在Linux上,nginx和php-fpm之间有两种通信方式:tcp套接字和unix套接字。

tcp套接字的优点是可以跨服务器。当nginx和php-fpm不在同一台机器上时,只能这样使用。

Unix套接字也称为IPC(进程间通信)套接字,用于在同一台主机上实现进程间通信。这样,php-fpm的socket文件位置需要填入nginx配置文件中。

数据传输过程的两种方式如下图所示:

两者的区别:

Unix socket不需要经过网络协议栈、打包解包、计算校验和、维护序列号和回复等。但只是将应用层数据从一个进程复制到另一个进程。因此,它的效率高于tcp套接字,可以减少不必要的tcp开销。但是unix socket在高并发时不稳定,当连接数爆发时,会产生大量的长期缓存。如果没有面向连接的协议的支持,大的数据包可能会直接出错而不返回异常。Tcp作为一种面向连接的协议,可以更好地保证通信的正确性和完整性。

Nginx和php-fpm的组合只需要在它们各自的配置文件中设置:

nginx中的配置

以tcp套接字通信为例

服务器{ listen 80#监听端口80并接收http请求server _ name www.test.com;#是网站地址root/usr/local/etc/nginx/www/huxintong _ admin;#存储代码项目的路径#路由到网站根目录www.test.com位置/{ index index.php;#跳到www.test.com/index.php汽车指数;} #在网站下请求php文件时,反向代理到PHP-fpmlocation ~ \。PHP $ { include/usr/local/etc/nginx/fastcgi . conf;#在nginx上加载fastcgi模块fastcgi _ intercept _ errorsfastcgi _ pass 127 . 0 . 0 . 1:9000;# tcp模式、IP地址和端口# fasrcgi _ pass/usr/run/PHP-fpm . sock # UNIX套接字连接模式}}2) php-fpm配置

Listen=127.0.0.1:9000#或listen=/var/run/php-fpm.sock注意,使用unix socket连接时,由于socket文件本质上是一个文件,存在权限控制的问题,所以需要注意nginx进程和php-fpm的权限,否则会提示未授权访问。(在用户自己的配置文件中设置用户)

php-fpm和nginx之间的通信可以通过上述配置完成。

应用中的选择

如果nginx和php-fpm运行在同一台服务器上,并发性不高(小于1000),则选择unix socket,提高nginx和php-fpm之间的通信效率。

如果面对高并发业务,考虑使用更可靠的tcp socket,通过负载均衡、内核优化等运维手段维持效率。

如果并发性很高,但您仍然想使用unix套接字,您可以通过以下方式提高unix套接字的稳定性。

1)把sock文件放在/dev/shm目录下,把sock文件放在这个目录下的内存中,这样内存读写更快。

2)改善积压

积压默认位128和1024最好转换成它们自己的正常QPS,配置如下。

在nginx.conf文件中

服务器{ listen 80默认积压=1024;} in }php-fpm.conf文件

Listen.backlog=10243)添加sock文件和php-fpm实例

在/dev/shm中创建新的sock文件,通过上游模块将请求负载均衡到nginx中的两个sock文件,并将这两个sock文件分别对应到两组php-fpm实例。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:PHP-FPM与Nginx通信机制详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。