Nginx + PHP-FPM 是怎么完成一次请求的处理的

Nginx + PHP-FPM 已经是当前互联网公司最流行的运行 PHP 网站的服务器软件组合,安装的方式各种各样,有根据需求自己下载源码编译安装,也有很成熟的一键安装包提供使用。那么一次请求是如何得到想要的响应的呢?整个流程大概如下图:

大概流程就是:

  • Nginx 监听 80 端口(也可以是其他端口);
  • Nginx 由 master 进程启动多个 Worker 处理 HTTP 请求,master 进程自己不处理请求;
  • worker 根据 nginx.conf 的配置和请求内容决定下一步:
    • 有可能将请求发到别的端口上(代理转发proxy_pass)
    • 将请求发送给其他提供 socket 接口的进程(如:PHP-FPM)
    • 直接返回
    • ...
  • php-fpm 根据请求调用 php-cgi 执行 php 脚本;
  • 将执行结果返回给 Nginx 处理请求的 Worker 进程。

这个过程中每个角色的工作任务都非常清晰:

  • Nginx 作为 Web 服务器,决定将请求分发给谁处理
  • PHP-FPM 维护 PHPCGI 进程池,处理请求的具体业务,并将结果输出给 Nginx

而 Nginx Worker 进程 和 PHP-FPM 管理的 PHPCGI 进程之间的通信方式可以是 unix domain socket,也可以是 ip:port 样式的 tcp socket.

results matching ""

    No results matching ""