了解使用 nginx 和 php-fpm 时的 php 管道



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

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

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

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

以下是我的几个问题:

  1. 当nginx收到请求时,php-fpm是否会接管,如果是的话,什么时候接管?
  2. 每个请求是否生成另一个进程/线程?
  3. 当您对 PHP 源代码文件进行更改时,是否必须重新加载? 如果不是,这是否意味着每次收到请求时,它每次都会解析源代码?

关于如何为 php 请求提供服务的任何其他有趣的观点都很棒。

您在

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

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

最新更新