Web服务器和cgi进程如何相互通信?

hun*_*gnv 5 php cgi fastcgi nginx

我想了解网络服务器(例如:nginx)和cgi/fastcgi如何相互通信.Web服务器如何将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;
        }
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?

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

Jus*_*tin 2

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

有关 CGI 应用程序的示例,请参阅wikipedia 页面的示例 perl 脚本,有关更多详细信息,请通读CGI 规范


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

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

您应该尝试查看Fast CGI 网站以获取更多信息 - 特别是那里的 Fast CGI 规范并详细解释了所有这些内容。