我想了解网络服务器(例如: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;
}
它是如何运作的?
编辑:如果有人能给我一段伪代码来描述进程(或其他)与php-fpm unix socket之间的通信,我们将不胜感激。
答案 0 :(得分:2)
CGI应用程序只是一个标准的可执行文件或脚本 - 每个对Web服务器的HTTP请求都对应于该可执行文件或脚本的单个执行/实例,其中环境变量用于传递有关请求的信息(例如请求URL)和请求方法)和HTTP请求体在标准输入上传递。脚本/可执行文件将原始HTTP output通过标准输出流传递给Web服务器。
有关CGI应用程序的示例,请参阅wikipedia page以获取示例perl脚本,有关详细信息,请阅读CGI specification
快速CGI是尝试减少CGI接口的开销 - 因为在许多操作系统上启动新进程是一项相对昂贵的任务,Fast CGI试图通过允许单个长时间运行的快速CGI进程来处理许多HTTP请求。
虽然Fast CGI的许多部分与CGI类似(例如环境变量的格式),但Fast CGI 所有信息都通过标准输入流传递。
您应该尝试查看Fast CGI website以获取更多信息 - 特别是快速CGI规范就在那里并详细解释了所有这些。