当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪Nginx中的FastCGI模块(FastCGI)详解      这是我见过的最详细的有关Nginx中FastCGI模块的注解了,有需要的朋友莫错过。 此模块允许nginx同FastCGI协同工作,并且控制哪些参数将被安全传递。 示例:   代码如下: location / {   fastcgi_pas.........
    ▪学习nginx的基本配置      自己的一段小笔记 ,学习nginx的基本配置,有兴趣的朋友可以看看。 配置文件结构 Nginx的配置文件大致分为三个模块,其结构如下: events { } http {      server      {      }      serve.........
    ▪Nginx学习笔记之有关FastCGI的知识      Nginx学习笔记之有关FastCGI的知识,有需要的朋友可以参考下。 1.FastCGI是什么? CGI:公共网关接口(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须.........

[1]Nginx中的FastCGI模块(FastCGI)详解
    来源: 互联网  发布时间: 2013-12-24

这是我见过的最详细的有关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"。


    
[2]学习nginx的基本配置
    来源: 互联网  发布时间: 2013-12-24

自己的一段小笔记 ,学习nginx的基本配置,有兴趣的朋友可以看看。

配置文件结构
Nginx的配置文件大致分为三个模块,其结构如下:
events
{
}

http
{
     server
     {
     }

     server
     {    
     }
}

events中配置一些事件相关的属性,比如最大连接数、所用的网络I/O模型等;
http中配置针对http请求的属性;
server则是虚拟主机的配置,每一个server代表一个虚拟主机;

一个最简单的虚拟主机配置
 

代码如下:
http
{
     server
     {
          listen 80 default;
          server_name news.10jqka.com.cn;
          access_log  logs/default.access.log combined;
          location / {
               index index.html;
               #静态文件存放的目录
               root /data0/htdocs/htdocs;
          }
     }
}

该配置表示:
监听80端口;
设置虚拟主机名为news.10jqka.com.cn;
设置日志路径及日志的保存格式;
设置默认的请求处理文件;
设置WEB目录的路径;

虚拟主机的类型
Nginx的虚拟主机主要分为三种类型:
基于IP
 

代码如下:
listen 192.168.1.141:80;
server_name 192.168.1.141;

基于域名
 

代码如下:
listen 80;
server_name poi..cn poi.0033.com poi.300033.info;

基于端口
listen 80;

代理配置
通过proxy_pass属性指定需要代理的域名或者IP,比如:
 

代码如下:
 location ~* /fileupload{
        proxy_pass http://u.thsi.cn;
}

该代理将访问本机的http://域名/fileupload/请求,转向了http://u.thsi.cn/fileupload/ 。


    
[3]Nginx学习笔记之有关FastCGI的知识
    来源: 互联网  发布时间: 2013-12-24

Nginx学习笔记之有关FastCGI的知识,有需要的朋友可以参考下。

1.FastCGI是什么?
CGI:公共网关接口(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
FastCGI:FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次.
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。

2.FastCGI的工作原理
(1)、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
(3)、当客户端请求到达Web Server(Nginx)时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
(4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server(Nginx)。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
  
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

3.FastCGI的不足
 因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。 Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。

4.PHP FastCGI的优点
PHP脚本运行速度更快
需要使用的系统资源更少
不需要对现有代码做任何改变

5.php-fpm
为php打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
.net/c#/asp.net iis7站长之家
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3