nginx - webserver和cgi进程如何相互通信?

标签 nginx cgi fastcgi php

我想了解webserver(例如:nginx)和cgi/fastcgi是如何相互通信的。 webserver如何将cgi脚本传递给cgi进程,cgi进程如何响应请求。

在Nginx中,我们这样配置,让nginx将PHP脚本传递给php-fpm

 location / {
            root   /home/service/public_html;
            fastcgi_pass   unix:/tmp/php-fpm-test.socket;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/service/public_html/index.php;
            include        fastcgi_params;
        }

它是如何工作的?

编辑:如果有人能给我一段伪代码来描述进程(或其他)与 php-fpm unix 套接字之间的通信,我将不胜感激。

最佳答案

CGI 应用程序只是一个标准的可执行文件或脚本 - 对 Web 服务器的每个 HTTP 请求都对应于该可执行文件或脚本的单个执行/实例,其中环境变量用于传递有关请求的信息(例如请求 URL和请求方法)和 HTTP 请求正文在标准输入上传递。脚本/可执行文件传递原始 HTTP output通过标准输出流到网络服务器。

有关 CGI 应用程序的示例,请参阅 wikipedia page有关示例 perl 脚本和更多详细信息,请通读 CGI specification


Fast CGI 试图减少 CGI 接口(interface)的开销——因为在许多操作系统上启动一个新进程是一项相对昂贵的任务,Fast CGI 试图通过允许单个长时间运行的 Fast CGI 进程来处理来减少这种开销许多 HTTP 请求。

尽管 Fast CGI 的许多部分与 CGI 相似(例如环境变量的格式),但对于 Fast CGI,所有信息都是通过标准输入流传递的。

您应该尝试查看 Fast CGI website了解更多信息 - 特别是 Fast CGI 规范在那里并详细解释了所有这些。

关于nginx - webserver和cgi进程如何相互通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8813860/

相关文章:

ssl - 安装ssl证书 Nginx 443端口拒绝连接

linux - perl 脚本未在配置相同的三个虚拟主机中执行

php - 当内容类型为 application/json 时,Nginx、fastcgi PHP 请求正文为空

java - PHP-CGI 帖子空

fastcgi - Catalyst 是否使 $c 在全局范围内可用?

file-upload - 在nginx中禁用请求缓冲

docker compose 容器之间共享文件

node.js - Docker 和 Nginx 解析错误的 IP 地址

php - 快速CGI, SCGI,

python - 在 xampp 窗口中运行的 python 脚本出错