`

nginx FastCGI模块

阅读更多

摘要
这个模块允许nginx同FastCGI协同工作,并且控制哪些参数将被安全传递。
例:

location / {  fastcgi_pass   localhost:9000;  fastcgi_index  index.php;   fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;  fastcgi_param  QUERY_STRING     $query_string;  fastcgi_param  REQUEST_METHOD   $request_method;  fastcgi_param  CONTENT_TYPE     $content_type;  fastcgi_param  CONTENT_LENGTH   $content_length;}

一个在缓存中的实例:

http {  fastcgi_cache_path   /path/to/cache  levels=1:2                       keys_zone=NAME:10m                       inactive=5m;   server {    location / {      fastcgi_pass    http://127.0.0.1;      fastcgi_cache   NAME;      fastcgi_cache_valid   200 302  1h;      fastcgi_cache_valid   301      1d;      fastcgi_cache_valid   any      1m;      fastcgi_cache_min_uses  1;      fastcgi_cache_use_stale error  timeout invalid_header http_500;    }  }}

0.7.48以后,缓存遵循后端服务器的Cache-Control, Expires等,0.7.66版本以后,"Cache-Control:"private"和"no-store"头同样被遵循。
指令
fastcgi_buffer_size
语法:fastcgi_buffer_size the_size ;
默认值:fastcgi_buffer_size 4k/8k ;
使用字段:http, server, location
这个参数指定将用多大的缓冲区来读取从FastCGI服务器到来应答的第一部分。
通常来说在这个部分中包含一个小的应答头。
默认的缓冲区大小为fastcgi_buffers指令中的每块大小,可以将这个值设置更小。
fastcgi_buffers
语法:fastcgi_buffers the_number is_size;
默认值:fastcgi_buffers 8 4k/8k;
使用字段:http, server, location
这个参数指定了从FastCGI服务器到来的应答,本地将用多少和多大的缓冲区读取,默认这个参数等于分页大小,根据环境的不同可能是4K, 8K或16K。
fastcgi_cache
语法:fastcgi_cache zone|off;
默认值:off
使用字段:http, server, location
为缓存实际使用的共享内存指定一个区域,相同的区域可以用在不同的地方。
fastcgi_cache_key
语法:fastcgi_cache_key line
默认值:none
使用字段:http, server, location
设置缓存的关键字,如:

fastcgi_cache_key localhost:9000$request_uri;

fastcgi_cache_path
语法:fastcgi_cache_path path [levels=m:n] keys_zone=name:size [inactive=time] [max_size=size]
默认值:none
使用字段:http
clean_time参数在0.7.45版本中已经移除。
这个指令指定FastCGI缓存的路径以及其他的一些参数,所有的数据以文件的形式存储,缓存的关键字(key)和文件名为代理的url计算出的MD5值。
Level参数设置缓存目录的目录分级以及子目录的数量,例如指令如果设置为:

fastcgi_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;那么数据文件将存储为:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c缓存中的文件首先被写入一个临时文件并且随后被移动到缓存目录的最后位置,0.8.9版本之后可以将临时文件和缓存文件存储在不同的文件系统,但是需要明白这种移动并不是简单的原子重命名系统调用,而是整个文件的拷贝,所以最好在fastcgi_temp_path和fastcgi_cache_path的值中使用相同的文件系统。
另外,所有活动的关键字及数据相关信息都存储于共享内存池,这个值的名称和大小通过key_zone参数指定,inactive参数指定了内存中的数据存储时间,默认为10分钟。
max_size参数设置缓存的最大值,一个指定的cache manager进程将周期性的删除旧的缓存数据。
fastcgi_cache_methods
语法:fastcgi_cache_methods [GET HEAD POST];
默认值:fastcgi_cache_methods GET HEAD;
使用字段:main,http,location
无法禁用GET/HEAD ,即使你只是这样设置:

fastcgi_cache_methods  POST;

fastcgi_cache_min_uses
语法:fastcgi_cache_min_uses n
默认值:fastcgi_cache_min_uses 1
使用字段:http, server, location
指令指定了经过多少次请求的相同URL将被缓存。
fastcgi_cache_use_stale
语法:fastcgi_cache_use_stale [updating|error|timeout|invalid_header|http_500]
默认值:fastcgi_cache_use_stale off;
使用字段:http, server, location
在某些网关错误、超时的情况下,nginx都将传送过期的缓存数据。
fastcgi_cache_valid
语法:fastcgi_cache_valid [http_error_code|time]
默认值:none
使用字段:http, server, location
为指定的http返回代码指定缓存时间,例如:

fastcgi_cache_valid  200 302  10m;fastcgi_cache_valid  404      1m;将响应状态码为200和302缓存10分钟,404缓存1分钟。
默认情况下缓存只处理200,301,302的状态。
同样也可以在指令中使用any表示任何一个。

fastcgi_cache_valid  200 302 10m;fastcgi_cache_valid  301 1h;fastcgi_cache_valid  any 1m;

fastcgi_connect_timeout
语法:fastcgi_connect_timeout time
默认值:fastcgi_connect_timeout 60
使用字段:http, server, location
指定同FastCGI服务器的连接超时时间,这个值不能超过75秒。
fastcgi_index
语法:fastcgi_index file
默认值:none
使用字段:http, server, location
如果URI以斜线结尾,文件名将追加到URI后面,这个值将存储在变量$fastcgi_script_name中。例如:

fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;请求"/page.php"的参数SCRIPT_FILENAME将被设置为"/home/www/scripts/php/page.php",但是"/"为"/home/www/scripts/php/index.php"。
fastcgi_hide_header
语法:fastcgi_hide_header name
使用字段:http, server, location
默认情况下nginx不会将来自FastCGI服务器的"Status"和"X-Accel-..."头传送到客户端,这个参数也可以隐藏某些其它的头。
如果必须传递"Status"和"X-Accel-..."头,则必须使用fastcgi_pass_header强制其传送到客户端。
fastcgi_ignore_client_abort
语法:fastcgi_ignore_client_abort on|off
默认值:fastcgi_ignore_client_abort off
使用字段:http, server, location
如果当前连接请求FastCGI服务器失败,为防止其与nginx服务器断开连接,可以用这个指令。
fastcgi_ignore_headers
语法:fastcgi_ignore_headers name [name...]
使用字段:http, server, location
这个指令禁止处理一些FastCGI服务器应答的头部字段,比如可以指定像"X-Accel-Redirect", "X-Accel-Expires", "Expires"或"Cache-Control"等。
fastcgi_intercept_errors
语法:fastcgi_intercept_errors on|off
默认值:fastcgi_intercept_errors off
使用字段:http, server, location
这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
你必须明确的在error_page中指定处理方法使这个参数有效,正如Igor所说“如果没有适当的处理方法,nginx不会拦截一个错误,这个错误不会显示自己的默认页面,这里允许通过某些方法拦截错误。
fastcgi_max_temp_file_size
语法:fastcgi_max_temp_file_size 0
默认值:?
使用字段:?
根据源代码关闭FastCGI缓冲。
fastcgi_no_cache
语法:fastcgi_no_cache variable [...]
默认值:None
使用字段:http, server, location
确定在何种情况下缓存的应答将不会使用,示例:

  fastcgi_no_cache $cookie_nocache  $arg_nocache$arg_comment;  fastcgi_no_cache $http_pragma     $http_authorization;如果为空字符串或者等于0,表达式的值等于false,例如,在上述例子中,如果在请求中设置了cookie "nocache",缓存将被绕过。
fastcgi_next_upstream
语法:fastcgi_next_upstream error|timeout|invalid_header|http_500|http_503|http_404|off
默认值:fastcgi_next_upstream error timeout
使用字段:http, server, location
指令指定哪种情况请求将被转发到下一个FastCGI服务器:
·error — 传送中的请求或者正在读取应答头的请求在连接服务器的时候发生错误。
·timeout — 传送中的请求或者正在读取应答头的请求在连接服务器的时候超时。
·invalid_header — 服务器返回空的或者无效的应答。
·http_500 — 服务器返回500应答代码。
·http_503 — 服务器返回503应答代码。
·http_404 — 服务器返回404应答代码。
·off — 禁止请求传送到下一个FastCGI服务器。
注意传送请求在传送到下一个服务器之前可能已经将空的数据传送到了客户端,所以,如果在数据传送中有错误或者超时发生,这个指令可能无法修复一些传送错误。
fastcgi_param
语法:fastcgi_param parameter value
默认值:none
使用字段:http, server, location
指定一些传递到FastCGI服务器的参数。
可以使用字符串,变量,或者其组合,这里的设置不会继承到其他的字段,设置在当前字段会清除掉任何之前的定义。
下面是一个PHP需要使用的最少参数:

  fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;  fastcgi_param  QUERY_STRING     $query_string;PHP使用SCRIPT_FILENAME参数决定需要执行哪个脚本,QUERY_STRING包含请求中的某些参数。
如果要处理POST请求,则需要另外增加三个参数:

 fastcgi_param  REQUEST_METHOD   $request_method; 

fastcgi_param  CONTENT_TYPE     $content_type; 

fastcgi_param  CONTENT_LENGTH   $content_length;

如果PHP在编译时带有--enable-force-cgi-redirect,则必须传递值为200的REDIRECT_STATUS参数:

fastcgi_param  REDIRECT_STATUS  200;

fastcgi_pass
语法:fastcgi_pass fastcgi-server
默认值:none
使用字段:http, server, location
指定FastCGI服务器监听端口与地址,可以是本机或者其它:

fastcgi_pass   localhost:9000;使用Unix socket:

fastcgi_pass   unix:/tmp/fastcgi.socket;同样可以使用一个upstream字段名称:

upstream backend  {  server   localhost:1234;}

fastcgi_pass   backend;

fastcgi_pass_header
语法:fastcgi_pass_header name
默认值:none
使用字段:http, server, location
fastcgi_read_timeout
语法:fastcgi_read_timeout time
默认值:fastcgi_read_timeout 60
使用字段:http, server, location
前端FastCGI服务器的响应超时时间,如果有一些直到它们运行完才有输出的长时间运行的FastCGI进程,或者在错误日志中出现前端服务器响应超时错误,可能需要调整这个值。
fastcgi_redirect_errors
语法:fastcgi_redirect_errors on|off
指令重命名为fastcgi_intercept_errors。
fastcgi_send_timeout
语法:fastcgi_send_timeout time

默认值:fastcgi_send_timeout 60

使用字段:http, server, location
指令为上游服务器设置等待一个FastCGI进程的传送数据时间,如果有一些直到它们运行完才有输出的长时间运行的FastCGI进程,那么可以修改这个值,如果你在上有服务器的error log里面发现一些超时错误,那么可以恰当的增加这个值。
指令指定请求服务器的超时时间,指完成了2次握手的连接,而不是完整的连接,如果在这期间客户端没有进行数据传递,那么服务器将关闭这个连接。
fastcgi_split_path_info
语法:fastcgi_split_path_info regex
使用字段:location
可用版本:0.7.31以上,示例:

location ~ ^(.+\.php)(.*)$ {...fastcgi_split_path_info ^(.+\.php)(.*)$;fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;...}请求"/show.php/article/0001"的参数SCRIPT_FILENAME将设置为"/path/to/php/show.php",参数PATH_INFO为"/article/0001"。
fastcgi_store
语法:fastcgi_store [on | off | path]
默认值:fastcgi_store off
使用字段:http, server, location
制定了存储前端文件的路径,参数on指定了将使用root和alias指令相同的路径,off禁止存储,此外,参数中可以使用变量使路径名更明确:

fastcgi_store   /data/www$original_uri;应答中的"Last-Modified"头将设置文件的最后修改时间,为了使这些文件更加安全,可以将其在一个目录中存为临时文件,使用fastcgi_temp_path指令。
这个指令可以用在为那些不是经常改变的后端动态输出创建本地拷贝的过程中。如:

location /images/ {  root                 /data/www;  error_page           404 = /fetch$uri;} location /fetch {  internal;   fastcgi_pass           fastcgi://backend;  fastcgi_store          on;  fastcgi_store_access   user:rw  group:rw  all:r;  fastcgi_temp_path      /data/temp;   alias                  /data/www;}fastcgi_store并不是缓存,某些需求下它更像是一个镜像。
fastcgi_store_access
语法:fastcgi_store_access users:permissions [users:permission ...]
默认值:fastcgi_store_access user:rw
使用字段:http, server, location
这个参数指定创建文件或目录的权限,例如:

fastcgi_store_access  user:rw  group:rw  all:r;如果要指定一个组的人的相关权限,可以不写用户,如:

fastcgi_store_access  group:rw  all:r;fastcgi_temp_path
语法:fastcgi_temp_path path [level1 [level2 [level3]]]
默认值:fastcgi_temp_path fastcgi_temp
使用字段:http, server, location
指令指定存储从别的服务器传送来的数据临时文件路径,同样可以指定三级目录已经哈希存储,level的值指定为哈希设置多少标记,例如,在下列配置中:

fastcgi_temp_path  /spool/nginx/fastcgi_temp 1 2;

临时文件类似如下:

/spool/nginx/fastcgi_temp/7/45/00000123457·传送到FastCGI服务器的相关参数
请求头是以参数的形式传送到FastCGI服务器,以具体应用和脚本运行在FastCGI服务器上,这些参数通常以环境变量的形式取得,例如,"User-agent"头以HTTP_USER_AGENT参数传递,除此之外还有一些其他的http头,都可以用fastcgi_param指令自由传递。
变量
$fastcgi_script_name
这个变量等于一个以斜线结尾的请求URI加上fastcgi_index给定的参数。可以用这个变量代替SCRIPT_FILENAME 和PATH_TRANSLATED,以确定php脚本的名称。
如下例,请求"/info/":

 fastcgi_index  index.php;  fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;SCRIPT_FILENAME等于"/home/www/scripts/php/info/index.php"。

分享到:
评论

相关推荐

    《Nginx模块开发指南:使用C++11和Boost程序库》罗剑锋 azw3

    Nginx 的一个突出特点是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功能,自2004 年发布至今,已经拥有百余个官方及非官方的功能模块(如fastcgi、memcached、mysql 等),使得Nginx 成长为了一个...

    实战nginx-张宴

    5.2 Nginx与ASP.NET( Mono+FastCGI) 在Linux上的安装、 配置 5.3 Nginx与Perl( FastCGI) 在Linux上的安装、 配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 6.1 什么是负载均衡和反向代理 6.2 常见的Web...

    Nginx全套学习指南

    第4章 Nginx与PHP(FastCGI)的安装、配置与优化 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 第7章 Nginx的Rewrite规则与实例 第8章 Nginx模块开发 第9章 Nginx的...

    实战Nginx.取代Apache的高性能Web服务器

    实战Nginx.取代Apache的高性能Web服务器 电子工业出版社 319页 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx简介 1.3 选择Nginx的理由 ...15.5 Nginx邮件模块配置实例

    Nginx模块开发指南使用C11和Boost.pdf

    Nginx 的一个突出特点是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功能,自2004 年发布至今,已经拥有百余个官方及非官方的功能模块(如fastcgi、memcached、mysql 等),使得Nginx 成长为了一个...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    张宴《实战Nginx:取代Apache的高性能Web服务器》pdf电子版下载,此资料网友共享,请购买作者正版书籍. 目录介绍: 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 ...15.5 Nginx邮件模块配置实例

    Nginx服务器的安装与配置.pdf

    第4章 Nginx与PHP(FastCGI)的安装、配置与优化.pdf 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置.pdf 第6章 Nginx HTTP负载均衡和反向代理的配置与优化.pdf 第7章 Nginx的Rewrite规则与实例.pdf 第8章 Nginx模块...

    Nginx 手册

    4.Nginx与PHP(FastCGI)的安装,配置与优化 5.Nginx与JSP,ASP.NET,Perl的安装与配置 6.Nginx HTTP负载均衡和反向代理的配置与优化 7.Nginx的Rewrite规则与实例 8.Nginx模块开发 9.Nginx的web缓存服务与新浪网的开源N...

    Nginx模块开发指南:使用C++11和Boost程序库.mobi

    自 2004 年 正式 发布 以来, Nginx 已经 拥有 了 百余 个 官方 及 非官方 的 功能 模块( 如 fastcgi、 memcache、 mysql、 lua 等), 这 使得 Nginx 超越 了 一般 意义上 的 Web 服务器, 成为 了 一个 近乎“ ...

    nginx缓存清除插件ngx_cache_purge.zip

    ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_cache_purge on|off|<method> [from all|<ip> [.....

    Nginx实战:取代Apache的高性能Web服务器

    第4章 Nginx与PHP(FastCGI)的安装、配置与优化 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 第7章 Nginx的Rewrite规则与实例 第8章 Nginx模块开发 第9章 Nginx的...

    nginx-配置指南 2018

    第1章 Nginx简介 第2章 Nginx服务器的安装与配置 第3章 Nginx的基本配置与优化 第4章 Nginx与PHP(FastCGI)的安装、配置与优化 第5章 Nginx与JSP、ASP.NET、Perl的...第8章 Nginx模块开发 ..........................

    Linux下用Nginx作Perl程序服务器及其中Perl模块的配置

    perl + fastcgi + nginx搭建 nginx + fastcgi是php下最流行的一套环境了,那perl会不会也有fastcgi呢,当然有,今天来搭建下nginx下perl的fastcgi.性能方面也不亚于php,但是现在web程序php的流行程度perl无法比拟了...

    实战Nginx:取代Apache的高性能Web服务器

    第4章 Nginx与PHP(FastCGI)的安装、配置与优化.pdf 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置.pdf 第6章 Nginx HTTP负载均衡和反向代理的配置与优化.pdf 第7章 Nginx的Rewrite规则与实例.pdf 第8章 Nginx模块...

    Nginx配置详解.docx

    支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。 Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为...

    nginx配置参数说明.txt

    模块化机制,非DSO机制,支持多种过滤器gzip,SSI和图像的模块完成图形大小调整等 支持SSL 扩展功能: 基于名称和IP做虚拟主机 支持keeplive 支持平滑配置更新或程序版本升级 定制访问日志,支持使用...

    Ngnix学习指南电子版

    第4章 Nginx与PHP(FastCGI)的安装、配置与优化 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 第7章 Nginx的Rewrite规则与实例 第8章 Nginx模块开发 第9章 Nginx的...

    nginx-1.16.1.zip

    Nginx可以部署在网络上使用FastCGI脚本、SCGI处理程序、WSGI应用服务器或Phusion Passenger模块的动态HTTP内容,并可作为软件负载均衡器。[11] Nginx使用异步事件驱动的方法来处理请求。Nginx的模块化事件驱动架构...

Global site tag (gtag.js) - Google Analytics