nginx模块可分为  “官方模块 ”和 '第三方模块“。


命令nginx -V可查看nginx的编译参数,--with开头的参数就是指编译的模块部分。下面介绍部分模块及其配置:


1.--with-http_stub_status_module    

作用:展现nginx客户端状态

配置语法:      Syntax:stub_status;

                      Default:----

                      Context:server,location

看语法得知,此模块是配置在server或location下,如:

location  /mystatus{
                 stub_status;
        }

配置完后记得检查语法是否正确:    nginx -tc  /etc/nginx/nginx.conf

若正确则重载该服务:   nginx  -s reload -c  /etc/nginx/nginx.conf       或  systemctl  reload nginx

完成后即可在浏览器中输入 127.0.0.1/mystatus来查看nginx客户端状态:


active  connections 表示nginx当前活跃连接数

server accepts handled requests

           xxx  xxx  xxxx        (第一个表示nginx接收的握手的次数,第二个表示nginx处理的连接数,第三个表示总的请求数。正常情况第一个数等于第二个数,即没有丢失连接)

Reading: x(正在读的个数)    Writing:  x(正在往nginx写的个数)   Waiting:  x(nginx在开启keepalive时,客户端和服务端之间正在空闲等待的连接数)



2.--with-http_random_index_module        

  作用:目录中选择一个随机主页,用户每次进入看到的可能都是不同的主页

配置语法:     Syntax:random_index  on|off;

                        Default:random_index  off;

                        Context:location

例子:            

location  /{
                                root   /usr/share/nginx/html       默认    (实际生产环境则改成自定义的存放若干主页html的目录)
                                random_index  on;
                                .....................
                        }

注意:隐藏的html文件无法被选择



3.--with-http_sub_module                   

 作用:Http内容替换

配置语法有多个,这里列出常用的几个:      

(1)Syntax:sub_filter  string  replacement;         string是被替换的内容(html代码)      replacement是替换内容(html代码)

   

 

(2)

 Syntax:sub_filter_last_modified  on|off;         last_modified是响应头信息的一部分,主要应用于缓存,显示http响应内容上次修改的时间

  

       

(3)Syntax:sub_filter_once on|off;                      on则只匹配替换内容的第一个,off则匹配所有

         Default::sub_filter_once on




4.请求限制模块

可通过下面两个模块任一个实现:

TCP连接频率限制-limit_conn_module

                     配置语法:        

                          Syntax:limit_conn_zone   key      zone=name:size     

limit_conn_zone是操作系统中保存连接状态的空间       key是限制条件(比如客户端IP)

 Context:http   name是空间的名字,size是分配的空间大小


  Syntax:limit_conn zone  number                  zone指空间的名字 ,number是同一时间允许的连接个数

                          Default:-----

 

Http请求频率限制-limit_req_module

     

  Syntax:limit_req_zone  key zone=name:size  rate=x r/s;       rate即key指定的客户端的限制请求频率r/s

                        Default:-----

     


 

                         Default:-----

       

配置示例如下图:

http下

nginx check模块 nginx查看模块_centos

server   location下

nginx check模块 nginx查看模块_centos_02




5.访问控制模块

5.1基于IP的访问控制-http_access_module                   

作用:允许或拒绝某些IP访问

配置语法:    

 Syntax:allow address | CIDR | unix:|all;

        



        

配置示例:                 location  ~ ^/XXX.html  { 

root  自定义存放页面的目录

deny   234.12.122.34;               拒绝此IP访问以XXX.html为后缀的域名,会报403错误
allow  all;
index  index.html   index.htm;
}

局限性:假如客户端不是直接与服务端连接,而是中间还隔着代理的话,那么访问控制将无效,因为客户端是先访问代理,代理再访问服务端,而http_access_module 是基于变量remote_addr来识别客户端IP的,但是remote_addr存储的不是客户端的IP而是代理的IP,因此访问控制无效。那么有什么方法呢?

(1)采用别的Http头信息控制访问,如:http_x_forwarded_for

nginx check模块 nginx查看模块_nginx check模块_03

x_forwarded_for变量是http头信息中的一个变量,它记录的内容=ClientIP+Proxy(1)IP+Proxy(2)IP.................


(2)结合geo模块



(3)通过Http自定义变量进行传递



5.2基于用户的信任登录-http_auth_basic_module             

 作用:提供登录认证界面控制用户访问

   配置语法:       Syntax: auth_basic string | off;string是认证界面显示的提示信息

这方法有其局限性:需要把用户信息存到一个文件里,效率低下,且不好管理因为有着多套用户名密码。