Nginx 不支持对外部程序的调用, 所以必须通过 FastCGI 接口实现对外部程序的调用从而实现对客户端动态页面请求的处理
CGI 的英文全称为 Common Gateway Interface(公共网关接口), 是 Nginx 和动态脚本程序的桥梁, Nginx 通过 FastCGI 接口将动态请求发送给 FastCGI,FastCGI 中的 Wrapper 进程生成一个线程, 将请求交给脚本解释程序执行, 然后通过原来的 socket 将解释执行后的结果原路返回给 Nginx, 之后 Nginx 将结果交给客户端
Nginx 是通过套接字文件 socket 来将动态请求发送给 wrapper, 使用的是 Tcp 协议 wrapper 通过 CGI 接口来接受请求这样 web 服务器和解释程序之间完全可以独立开发, 这样避免了解释程序直接调用服务器的接口而导致的出错和崩溃以及安全性问题而且可以使 Nginx 专心处理静态页面请求和转发动态请求, 而将脚本解释器安装在另一台服务器, 使服务器的压力得到分摊
CGI 是作为 PHP 程序的补丁开发的, 安装 PHP 首先安装其所依赖的库, 之后在编译配置参数时加入对 CGI 的支持 --enable-fpm --enable-cgi 等选项编译 PHP 的扩展模块, 需要用到 php 中的 phpize 工具用来生成模块编译时的 configure 文件, 如果运行 phpize 时无法生成 configure 文件, 原因有: 没有安装 autoconf 软件包
php-fpm 进程的配置文件为 / usr/local/php/etc/php-fpm.conf 可以对 php-fpm 进行相应的配置
Nginx 配置支持 fastcgi:
- location ~ \.php${
- root html;
- fastcgi_pass unix:/tmp/fastcgi.soke // 通过套接字文件和 cgi 建立联系, 该文件在 php-fpm.conf 中设置
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME html$SCRIPT_FILE_NAME; // 设置参数
- include fastcgi_params; // 导入 fastcgi 参数配置文件, 该文件在 nginx 安装时自动生成
- }
来源: https://www.php1.cn/detail/php-80a214419d.html