原文链接:http://blog.51cto.com/blief/1739655
定义
CGI:全称"通用网关接口",Http服务器与其他机器上的程序进行"交谈"的一种工具,其程序一般运行在网络服务器上。
FastCGI全称:"快速通用网关接口",他可以一直执行着,此外还支持分布式的运算,即FastCGI程序可以在网站服务器
以外的主机上执行并接受来自其他网站服务器的请求
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。
众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等
FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。
FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。这在处理高并发访问时几乎是不可用的。
另外传统的CGI接口方式安全性也很差,现在已经很少使用了。
FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,
然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
原理
1、WebServer启动是载入FastCGI进程管理器
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web Server的连接
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器,Web Server
NGINX之FastCGI常用配置说明
1、fastcgi_connect_timeout
配置语法:fastcgi_connect_timeout 时间(单位为s)
默认值: FastCGI_connect_timeout 60s
配置区域: http server location
配置说明:指定NGINX与后端FastCGI server连接超时时间
2、fastcgi_send_timeout
配置语法: fastcgi_send_timeout 时间(单位为s)
默认值: fastcgi_send_timeout 60s;
配置区域: http server location
配置项说明:指定nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)
3、fastcgi_read_timeout
配置语法: fastcgi_read_timeout 时间(单位为s)
默认值: fastcgi_send_timeout 60s;
配置区域: http server location
配置项说明:指定nginx接受后端fastcgi响应请求超时时间 (指已完成两次握手后nginx接受fastcgi响应请求超时时间)
4、fastcgi_buffer_size
配置语法: fastcgi_buffer_size size (单位为k,一般为4的整数倍)
默认值: fastcgi_buffer_size 4k|8K
配置区域: http server location
配置项说明:指定nginx读取fastcgi响应第一部分需要用多大的缓冲区,这个值表示将使用一个64kb的缓冲区响应第一部分应答
(应答头)可以设置为fastcgi_buffers缓存区大小
5、fastcgi_buffers
配置语法: fastcgi_buffers num size (单位为k,一般为4的整数倍)
默认值: fastcgi_buffers 8 4k|8K
配置区域: http server location
配置项说明: 指nginx需要用多大的缓冲区缓冲fastcgi的应答请求(整个应答),如果一个php脚本所产生的页面大小为256kb,那么会分配4个64kb缓冲区来缓存,如果页面大于256kb,
那么大于256kb的部分会缓存到fastcgi_temp指定的路径中,但是因为内存中数据处理远快于磁盘, 所以这个值应该为站点中php所产生的页面大小的中间值,
如果站点大部分php脚本产生的页面为:256kb, 那么可以设置成成"8 16k 4 64k"
6、 fastcgi_busy_buffers_size
配置语法:fastcgi_busy_buffers_size size (单位为K,一般为fastcgi_buffers值的2倍)
默认值: fastcgi_busy_buffers 8k|16K
配置区域: http server location
配置项说明:整个数据请求需要多大的缓存区,建议设置为fastcgi_buffers值的两倍
7、fastcgi_temp_file_write_size
配置语法:fastcgi_temp_file_write_size size (单位为K,一般为fastcgi_buffers值的两倍)
默认值: fastcgi_temp_file_write_size 8k|16K
配置区域: http server location
配置项说明:写入缓存文件使用多大的数据块,默认值是fastcgi_buffer值的2倍
8、fastcgi_temp_path
配置语法:fastcgi_temp_path path (临时文件存放路径)
配置区域: http server location
配置项说明:fastcgi临时文件存放路径
注:不过这一配置项常常不会用到
9、fastcgi_cache_path
配置语法:fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time]
[loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
配置区域: http server location
配置项说明:定义fastcgi缓存的路径及其他设置
10、fastcgi_cache
配置语法:fastcgi_cache zone |off (其中zone对应fastcgi_cache_path 中zone名称)
默认值: fastcgi_cache off
配置区域: http ,server, location
配置项说明:开启fastcgi_cache并为其定义一个名称,可以防止nginx 502错误,降低cpu负载,不过也会引起其他问题,根据需求来选择
11、fastcgi_cache_valid
配置语法:fastcgi_cache_valid {code} time
配置区域: http server location
配置项说明:为指定的应答代码指定缓存时间
fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid any 1m;
上面意思就是对于状态码为200 302的网页缓存1小时,其他页面缓存1分钟
12、fastcgi_cache_key
配置语法:fastcgi_cache_key value
配置区域: http server location
配置项说明:以某个值为key,Nginx会取这个key的md5作为缓存文件 如果设置了缓存哈希目录,Nginx会从后往前取相应的位数做为目录
例如:fastcgi_cache_key "$request_method://$host$request_uri";
13、fastcgi_cache_min_uses
配置语法:fastcgi_cache_min_uses
配置区域: http server location
配置项说明:URL至少经过多少次请求将被缓存