nginx-fastcgi 第九章

CGI全称通用网关接口 Commmon Gateway Interface

用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上。

传统CGI接口方式性能较差,由于每次HTTP服务器遇到动态程序需要重启解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发时,几乎是不可能的,因此诞生了FastCGI。另外传统的CGI接口方式安全性也很差

一个可伸缩地。高速地在HTTP服务器和动态脚本语言间通信的接口

接口在linux下是socket(这个socket可以是文件socket也可以是ip socket)

主要优点把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FsatCGI包括Apache/Nginx/lighttpd等

支持语言比较流行的是PHP,接口方式采用C/S架构,可以将HTTP服务器和脚本解析器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。

当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

一、在LNMP 环境中 nginx 通过 fastcgi 模块与PHP 程序进行交互

1.安装 php-fpm , php-fpm 是一个能够调用php-cgi 的程序。

  fastcgi是一个协议,php-fpm实现了这个协议,PHP的解释器是php-cgi。php-cgi只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理(皇上,臣妾真的做不到啊!)所以就出现了一些能够调度php-cgi进程的程序,比如说由lighthttpd分离出来的spawn-fcgi。好了PHP-FPM也是这么个东东,在长时间的发展后,逐渐得到了大家的认可(要知道,前几年大家可是抱怨PHP-FPM稳定性太差的),也越来越流行。

root@nginx php-fpm.d]# yum list *php*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
php-common.x86_64                               5.4.16-46.el7                         @base
php-fpm.x86_64                                  5.4.16-46.el7                         @base
Available Packages
emacs-php-mode.noarch                           1.18.2-1.el7                          base 
graphviz-php.x86_64                             2.30.1-21.el7                         base 
[root@nginx php-fpm.d]# yum install php-fpm -y

2.编辑 nginx 配置文件

        location ~ .php$ {
            root           /usr/local/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

访问报错修改 /usr/local/nginx/conf/fastcgi_param 配置文件为如下格式:

[root@nginx conf]# cat fastcgi_params
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

编辑 PHP 测试页面:

[root@nginx html]# cat index.php 
<?php
    phpinfo();
?>
[root@nginx html]# 

访问测试:

  

原文地址:https://www.cnblogs.com/zy09/p/10366122.html