nginx模块 ngx_http_fastcgi_module

2018-07-17 14:13:41

ngx_http_fastcgi_module 模块使得nginx可以与 fastcgi 服务器通信。比如目前要使得 nginx 支持 php 就得使用 fastcgi技术,在服务器上装上 nginx + php-fpm(php的fastcgi服务器)。

内部原理很简单,就是当 nginx 接收到客户端 http 请求数据时,nginx 就把这些数据转发给 fastcgi 服务器,然后 fastcgi 服务器处理完后再回送给 nginx 服务器,然后 nginx 把处理结果响应给客户端。

fastcgi_pass

Syntax:	fastcgi_pass address;
Default: —
Context: location, if in location

指定 fastcgi 地址,可以是 ip地址+端口,也可以是 unix domain。

fastcgi_pass localhost:9000;

fastcgi_pass unix:/tmp/fastcgi.socket;

fastcgi_index

Syntax:	fastcgi_index name;
Default: —
Context: http, server, location

如果 uri 以 / 结尾,就会把文件名附在 / 后面,该文件名存在于变量 $fastcgi_script_name。

fastcgi_param

Syntax:	fastcgi_param parameter value [if_not_empty];
Default: —
Context: http, server, location

设置参数以便传递给 fastcgi 服务器。value 可以是文本、变量或者两者结合。

fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;

当请求的uri为 /page.php,那么 SCRIPT_FILENAME 等于下面。

/home/www/scripts/php/page.php

当请求的uri为 /,那么 SCRIPT_FILENAME 等于下面。  

/home/www/scripts/php/index.php


上面几个比较常用,该模块还有很多配置选项,在这里不再列出,有兴趣的朋友可以参考官方文档 ngx_http_fastcgi_module

下面我们看一下 nginx + php-fpm配置。

location ~ (\.php)$ {
    root html/admin; #指定php的根目录
    fastcgi_pass 127.0.0.1:9000;#php-fpm的默认端口是9000
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

conf/fastcgi_params 文件内容如下。

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_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  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

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 only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

一目了然,相信读者可以自己看的懂。


 备注

1.测试环境centos7 64位,nginx版本为 1.14.0。
2.读者也可以参考官方文档 nginx documentation
3..原文地址http://www.freecls.com/a/2712/bc


©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。