nginx 与 php

nginx 是一个高性能的 http 和反向代理服务器。也是一个 IMAP/POP3/SMTP 代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗

当接收到一个 http 请求时,通过配置文件找到对应的 server。然后匹配 server 中的所有 location,找到最匹配的。而在 location 中的命令会启动不同的模块去完成工作,比如 rewrite 模块、index 模块。因此在 nginx 中模块可以看作真正的劳动工作者。nginx 的模块是被编译到 nginx 中的,属于静态方式。启动 nginx 时,模块被自动加载。不像 apache,把模块单独编译成 so 文件,在配置文件中指定是否加载。所以,单比模块加载方面,nginx 也比 apache 速度上有提升

那 nginx 是怎么调用 php 的呢?先看下面的 nginx 中关于 php 的配置

location ~ \.php$ {
    root           /webpath;
    fastcgi_pass   127.0.0.1:9000;
    ...
}

这个 location 指令把以 php 为文件后缀的请求,交给 127.0.0.1:9000 处理。我想你看到这个应该猜到了,这是一个 C/S 架构东西。 而这里的IP地址和端口(127.0.0.1:9000)就是 fastcgi 进程监听的 ip 地址和端口。fastcgi 是一个可伸缩地、高速地在 http server 和动态脚本语言间通信的接口。多数流行的 http server 都支持 fastcgi,包括 apache、nginx 和 lighttpd 等。同时,fastcgi 也被许多脚本语言支持,其中就有 php。

那这个fastcgi的配置IP和端口从何而来呢?在 php-fpm.conf 中可以看到如下:

listen = 127.0.0.1:9000  #这个表示 php 的 fastcgi 进程监听的 ip 地址以及端口

pm.start_servers = 2

php-fpm 作为 fastcgi 的进程管理器,可以有效控制内存和进程,并且平滑重载 php 配置。php5.3 以后,php-fpm 被集成到 php 的 core 中,默认安装,无须配置。

fastcgi 进程管理器 php-fpm 自身初始化,启动主进程 php-fpm 和启动 start_servers 个 fastcgi 子进程。主进程 php-fpm 主要是管理 fastcgi 子进程,监听9000端口,fastcgi 子进程等待请求。当客户端请求到达 nginx 时,nginx 通过location 指令,将所有以 php 为后缀的文件都交给 127.0.0.1:9000 来处理。php-fpm 选择并连接到一个 fastcgi 子进程,并将环境变量和标准输入发送到 fastcgi 子进程。fastcgi 子进程完成处理后将标准输出和错误信息返回。当 fastcgi子进程关闭连接时,请求便告处理完成,等待下次处理

🙂

posted @ 2020-12-01 20:38  linsonga  阅读(247)  评论(1)    收藏  举报