使用nginx和php-fpm时理解php管道

时间:2014-11-28 21:53:01

标签: nginx php

所以我试图理解PHP管道如何从请求到响应,特别是在使用nginx和php-fpm时。

我来自java / .net背景,所以通常一旦发送进程请求它使用线程等来处理请求/响应周期。

使用php / nginx,我注意到fpm进程设置如下:

location / {
    include /path/to/php-fpm;
}

以下是我的一些问题:

  1. 当nginx收到请求时,php-fpm会接管吗,如果有的话,在什么时候?
  2. 每个请求都会产生另一个进程/线程吗?
  3. 当您对php源代码文件进行更改时,是否需要重新加载?如果没有,这是否意味着每次请求进来时每次解析源代码?
  4. 关于如何提供php请求的任何其他有趣的观点都很棒。

1 个答案:

答案 0 :(得分:1)

您在帖子中的配置无关紧要,因为include /path/to/php-fpm;包含nginx配置子部分。

  1. 它不会接管任何东西,请求通过fastcgi_pass从nginx传递到php-fpm,并且nginx等待回复但在此期间提供其他请求。
  2. Nginx使用reactor模式,因此请求由有限数量的进程提供(通常数量与计算机上可用的CPU核心数量相同)。它是一个事件驱动的Web服务器,它使用事件轮询来处理每个进程上的许多请求(异步)。在另一方面,php fpm使用进程池来执行php代码。
  3. 不,你没有,因为除非你设置了浏览器客户端的缓存标头或服务器缓存,否则在任何地方都没有缓存。如果文件因操作系统缓存而未更改且经常访问,则每次都不会解析php源代码。当文件内容发生变化时,它会再次被解析,就像普通文件一样。