nginx模块讲解

一、编译安装 nginx的http_stub_status_module监控其运行状态

步骤:

1 编译nginx,加上参数 --with-http_stub_status_module

2 修改nginx配置文件,添加监控状态配置,在nginx.conf的server块中添加如下代码

location /nginx_status { 
     # Turn on nginx stats 
     stub_status on; 
     # I do not need logs for stats 
     access_log   off; 
     # Security: Only allow access from 192.168.1.100 IP # 
     #allow 192.168.1.100; 
     # Send rest of the world to /dev/null # 
     #deny all; 
 }

3.这段代码是加在默认的server里的,假设默认server的配置为

listen       127.0.0.1:80; 
 server_name  127.0.0.1;

那么访问nginx的状态,就可以通过 curl 127.0.0.1/nginx_status访问了

4.返回结果类似于:

Active connections: 1  
 server accepts handled requests 655 655 1985  
 Reading: 0 Writing: 1 Waiting: 0

5.相关数据说明

Active connections: 对后端发起的活动连接数.

Server accepts handled requests: Nginx总共处理了655 655 1985个连接,成功创建38810620次握手(证明中间没有失败的),总共处理了298655730个请求.

Reading: Nginx 读取到客户端的Header信息数.

Writing: Nginx 返回给客户端的Header信息数.

Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接.所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中.

二、random index介绍

1.ngx_http_random_index_module模块处理以'/'为后缀的请求,并且在当前目录下随机抽取一个页面作为首页.这个模块将在ngx_http_index_module模块之前执行. 默认情况下,这个模块没有安装,你需要在安装nginx的时候加上配置参数--with-http_random_index_module.

2.随机首页配置

location / { 
  random_index on/off; 
 }

3.语法

语法: random_index on | off;

默认值: random_index off;

配置段: location

启用或者禁用random index模块

三、ngx_http_sub_module模块

1.它修改网站响应内容中的字符串,比如你想把响应内容中的‘hello world’全部替换成‘你好 世界’,这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module。

2.配置

server { 
     listen       80; 
     server_name  192.168.206.48; 
   
     root /data/site/yingda;     
   
     location / { 
         sub_filter  hello world '你好 世界'; 
         sub_filter_types text/html; #指定需要被替换的MIME类型,默认为“text/html”,如果制定为*,那么所有的 
         sub_filter_once on/off;#替换 一次/所有 
     } 
 }

四、nginx限制请求数(ngx_http_limit_req_module)模块

1.可以限制来自单个IP地址的请求处理频率。 限制的方法如同漏斗,每秒固定处理请求数,推迟过多请求。

2.该模块提供了两个配置参数,limit_req_zone 和 limit_req ,其中limit_req_zone 只能配置在 http{} 段,而 limit_req 则可以配置于http{},server{},location{} 区段中。

3.语法:

limit_req_zone $variable zone=name:size rate=rate; #主要是用来定义变量,空间名称,以及共享内存大小。

limit_req zone=name burst=100 nodelay; #主要是用来使用前面定义的空间,定义请求频率限制,限制频率每秒不超过一个请求,同时允许超过频率限制的请求数不多于100个;如果不希望超过的请求被延迟,可以用nodelay参数。

http{

  ...

  #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,

  #以$binary_remote_addr 为key,限制平均每秒的请求为20个,

  #1M能存储16000个状态,rete的值必须为整数,

  #如果限制两秒钟一个请求,可以设置成30r/m

limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; 
   ... 
   server{ 
     ... 
     location { 
       ... 
       #限制每ip每秒不超过20个请求,漏桶数burst为5 
       #brust的意思就是,每秒超过25个的请求返回503错误。 
       #nodelay,如果不设置该选项,严格使用平均速率限制请求数, 
       limit_req zone=allips burst=5 nodelay; 
       ... 
     } 
     ... 
   } 
   ... 
 }