⑤nginx 常用模块

目录索引 autoindex

Syntax: autoindex on | off;
Default:    
autoindex off;
Context:    http, server, location

//autoindex常用参数
autoindex_exact_size off;
默认为on, 显示出文件的确切大小,单位是bytes。
修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。

autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
修改为on, 显示的文件时间为文件的服务器时间。

charset utf-8,gbk;
默认中文目录乱码,添加上解决乱码。

配置目录浏览功能

server {
        listen       80;
        server_name  software.yangyijing.cn;
        autoindex_exact_size off;
        autoindex_localtime on;
        autoindex on;
        charset    UTF-8;
        root   /data/software;
  }
}

Nginx状态监控

--with-http_stub_status_module记录Nginx客户端基本访问状态信息

Syntax: stub_status;
Default:    —
Context:    server, location

具体配置如下:

 location /mystatus {
    stub_status on;
    access_log off;
}

//Nginx_status概述
Active connections:2    //Nginx当前活跃连接数
server accepts handled requests
16     16     19
server表示Nginx启动到现在共处理了16个连接。
accepts表示Nginx启动到现在共成功创建16次握手。
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。
handled requests,表示总共处理了19次请求。
Reading     Nginx读取到客户端的 Header 信息数。
Writing     Nginx返回给客户端的 Header 信息数。
Waiting    Nginx开启keep-alive长连接情况下, 既没有读也没有写, 建立连接情况

Nginx访问控制

基于IP的访问控制 http_access_module
基于用户登陆认证 http_auth_basic_module

基于IP的访问控制 http_access_module

//允许配置语法
Syntax: allow address | CIDR | unix: | all;
Default:    —
Context:    http, server, location, limit_except
//拒绝配置语法
Syntax: deny address | CIDR | unix: | all;
Default:    —
Context:    http, server, location, limit_except

//配置拒绝某一个IP, 其他全部允许

location ~ ^/1.html {
    root /usr/share/nginx/html;
    index index.html;
    deny 192.168.56.1;
    allow all;
}

//只允许某一个网段访问,其它全部拒绝

location / {
    root   html;
    index  index.php index.html index.htm;
    allow   192.168.56.0/24;
    deny    all;
}
```
http_access_module局限性

下图是使用http_x_forwarded_for记录真实客户端IP地址以及代理服务器IP

解决方式
1.采用HTTP头信息控制访问, 代理以及web服务开启http_x_forwarded_for
2.结合geo模块作
3.通过HTTP自动以变量传递

基于用户登陆认证  http_auth_basic_module
```
//配置语法
Syntax: auth_basic string| off;
Default:    auth_basic off;
Context:    http, server, location, limit_except
//用户密码记录配置文件
Syntax: auth_basic_user_file file;
Default:    -
Context:    http, server, location, limit_except
```

//需要安装依赖组件
```
[root@xuliangwei ~]# yum install httpd-tools
[root@xuliangwei ~]# htpasswd -c /etc/nginx/auth_conf xuliangwei
```
//可在http,server,location下添加如下信息
```
auth_basic "Auth access Blog Input your Passwd!";
auth_basic_user_file /etc/nginx/auth_conf;
```
用户认证局限性
1.用户信息依赖文件方式
2.操作管理机械,效率低下

解决办法
1.Nginx结合LUA实现高效验证
2.Nginx结合LDAP, 利用nginx-auth-ldap模块
####Nginx访问限制

连接频率限制 limit_conn_module
请求频率限制 limit_req_module

http协议的连接与请求
HTTP是建立在TCP, 在完成HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上在HTTP请求。

HTTP请求建立在一次TCP连接基础上
一次TCP请求至少产生一次HTTP请求
HTTP协议版本 	连接关系
HTTP1.0 	TCP不能复用
HTTP1.1 	顺序性TCP复用
HTTP2.0 	多路复用TCP复用

Nginx连接限制配置:
```
//全局定义连接限制
Syntax:  limit_conn_zone key zone=name:size;
Default: —
Context: http
//引用连接限制
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
```

//具体配置如下:
http {
//http段配置连接限制, 同一时刻只允许一个客户端IP连接
```
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
    ...
    server {
    ...  

        location / {
        //同一时刻只允许一个客户端IP连接
            limit_conn conn_zone 1;
        }
```

//压力测试
yum install -y httpd-tools
ab -n 50 -c 20  http://127.0.0.1/index.html

Nginx请求限制配置:
```
//全局定义请求限制
Syntax: 	limit_req_zone key zone=name:size rate=rate [sync];
Default: 	—
Context: 	http

```
示例:
```
//具体配置如下:
http {
//http段配置请求限制, rate限制速率,限制一秒钟最多一个IP请求
 
    ...
    server {
    ...  

        location / {
        //1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端
            limit_req zone=req_zone;
        //请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503
            #limit_req zone=req_zone burst=3 nodelay;
            #limit_req_status 412;
            #error_page 412 /err.html; 
        }
```

//压力测试
yum install -y httpd-tools
ab -n 50 -c 20  http://127.0.0.1/index.html

连接限制没有请求限制有效?

    我们前面说过, 多个请求可以建立在一次的TCP连接之上, 那么我们对请求的精度限制,当然比对一个连接的限制会更加的有效。

    因为同一时刻只允许一个连接请求进入。
    但是同一时刻多个请求可以通过一个连接进入。
    所以请求限制才是比较优的解决方案。
原文地址:https://www.cnblogs.com/yangtao416/p/14637469.html