我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

PHP-FPM引入CGI协议和协议

每种动态语言(PHP等)的代码文件都需要通过相应的解析器才能被服务器识别,利用CGI协议使解释器和服务器之间能够进行通信。 在服务器上解析PHP文件需要使用PHP解释器,再加上相应的CGI协议,这样服务器才能解析PHP文件。

由于CGI的机制要求每个请求都被处理,因此需要fork一个CGI进程,然后在请求完成后杀死该进程,这在实际应用中是一种资源的浪费。 因此,出现了CGI的改进版本,它不会在处理完请求后杀死进程。 处理,但继续处理多个请求,这大大提高了效率。

什么是 PHP-FPM

PHP-FPM就是PHP-,它是进程管理的实现并提供了进程管理的功能。 进程有两种类型:进程和进程; 进程只有一个,负责监听端口,接收服务器的请求,而一般有多个进程(具体数量根据实际需要配置),每个进程内部都嵌入一个PHP解释器。 这是代码实际执行的地方。

Nginx与php-fpm通信机制

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

www.test.com 
 |
 |
 Nginx 
 |
 |
location 到 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(进程间通信),用于实现同一主机上的进程间通信。 该方法需要填写nginx配置文件中php-fpm的文件位置。

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

两者的区别:

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

要结合Nginx和php-fpm,只需在各自的配置文件中进行设置:

1)Nginx中的配置

以tcp通信为例

server { 
 listen 80; #监听 80 端口,接收http请求
 server_name www.test.com; #就是网站地址
 root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
 #路由到网站根目录 www.test.com 时候的处理
 location / { 
 index index.php; #跳转到 www.test.com/index.php
 autoindex on;
 } 
 #当请求网站下 php 文件的时候,反向代理到 php-fpm
 location ~ .php$ { 
 include /usr/local/etc/nginx/fastcgi.conf; #加载 nginx 的 fastcgi 模块
 fastcgi_intercept_errors on; 
 fastcgi_pass 127.0.0.1:9000; # tcp 方式,php-fpm 监听的 IP 地址和端口
 # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式
 }
}

2)php-fpm的配置

php-fpm.conf

listen = 127.0.0.1:9000
# 或者类似下面这样
listen = /var/run/php-fpm.sock

注意,使用Unix连接时,由于文件本质上是文件,存在权限控制问题,所以需要注意nginx进程的权限和php-fpm的权限,否则会提示无法访问允许。 (在各自的配置文件中设置用户)

通过上面的配置,就可以完成php-fpm和nginx的通信了。

应用中的选择

如果nginx和php-fpm运行在同一台服务器上,并发量不高(不超过1000),选择unix可以提高nginx和php-fpm之间的通信效率。

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

如果并发量较高但仍想使用Unix,可以通过以下方式提高Unix的稳定性。

1)将sock文件放在/dev/shm目录下。 将内存中的sock文件放在该目录下,可以使内存读写速度更快。

2)改进

默认位是128、1024,这个值最好换算成自己正常的QPS,配置如下。

nginx.conf 文件

server { 
 listen 80 
 default backlog = 1024;
}

php-fpm.conf 文件

listen.backlog = 1024

3)添加sock文件和php-fpm实例

在/dev/shm中新建一个sock文件,通过nginx中的模块将请求负载均衡到两个sock文件,并将这两个sock文件映射到两组php-fpm实例。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/962.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线