·摘要
这个模块容许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"。