fastcgi pass php-fpm,nginx: fastcgi_pass的配置

在做nginx配置过程中,对于在与php-fpm选择哪种通信模式有些疑问,故补充相关知识点并记录于此。

说明fastcgi_pass的配置问题前,先理解几个概念:

CGI ( Common Gateway Interface )公共网关接口,是web服务器与外部应用程序进行通信交互的标准接口。CGI规范定义了web服务器如何向外部应用程序发送消息,在接收到外部应用程序的信息后又如何进行处理等内容。我们通常所说的CGI是实现了CGI标准接口的程序。只要某种语言具有标准输入、输出、环境变量(如C、perl、php),就可以用来编写CGI程序。

web服务器一般只处理静态文件请求(如jpg、html),当接收到动态脚本请求(如php),web服务器主进程就会fork一个新的进程来启动CGI程序(如php-cgi,启动过程中需要读取配置文件,加载扩展等),启动后根据请求提交的参数进行相应的处理(如解析php),并将处理结果(如输出标准的html)返回给web服务器,web服务器再将内容发送给客户端,然后关闭CGI进程。

CGI减少了web服务器与外部应用程序的关联,让他们更为独立,但是每次请求都需要fork一个新进程去启动CGI程序,处理完之后进程随之关闭,这种方式效率十分低下,过多的进程会消耗资源和内存。

FastCGI 像是一个常驻型的CGI程序,可以一直运行着,不会每次请求都fork一个进程。它支持分布式运算,可以跟web服务器部署在不同的主机中,接受来自其他web服务器的请求。

FastCGI进程管理器是需要单独启动的,启动后生成一个FastCGI主进程和多个CGI的解释器进程。web服务器接收到动态脚本请求时,会把请求交给FastCGI主进程,由主进程分配给一个空闲的子进程进行解析处理,处理完成后将结果返回给web服务器,客户端再将结果发送给客户端。处理完成后FastCGI子进程不会关闭,而是继续等待主进程分配任务。

这样它就可以将CGI子进程保持在内存中并因此获得高效的性能。

a694067f38fefb06cc479c88006f520f.png

php-fpm fpm(fastcgi process manager)是fastcgi进程管理器的简称。它是php中的fastCGI协议的具体实现,负责管理一个进程池,处理来自web服务器的请求,有效控制内存和进程,可以平滑重载php的配置(通过生成新的子进程可以实现php.ini修改后的平滑重启)。它在PHP5.3之后,开始内置于PHP。

Nginx处理PHP请求就是通过与php-fpm进程间通信实现的。nginx与php-fpm进程间的通信有两种方式,用哪种取决你的php-fpm的配置:

TCP

TCP是IP加端口,可以用于跨服务器。配置如下:

php-fpm.conf: listen = 127.0.0.1:9000

nginx.conf: fastcgi_pass = 127.0.0.1:9000

UNIX Domain Socket

不经过网络,只能用于nginx和php-fpm在同一个服务器场景。配置如下:

php-fpm.cnf: listen = /run/php/php-fpm.sock

nginx.conf: listen = unix:/run/php/php-fpm.sock

其中php-fpm.sock是一个文件,由php-fpm生成

UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前比较广泛使用的IPC机制,这种通信方式是发生在系统内核里而不会在网络中传播,它不会走到TCP的那一层,直接以文件形式,以stream socket通信,避免频繁创建TCP短链接而导致TIME_WAIT连接过多的问题。

0e92577754ca69a610430448752ef032.png

如果是TCP Socket则需要走到IP层,对于非同一台服务器上,TCP就需要走得更多。

TCP Socket(本地回环)

03cd3a632447ae9497370d6611090c79.png

TCP Socket(nginx与php-fpm在不同的服务器)

563280f40e117dabe76d5ca779bc9dac.png

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值