欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

nginx常用模块

程序员文章站 2022-05-29 10:31:36
[toc] nginx常用模块 1.目录索引模块 nginx 默认是不允许列出整个目录浏览下载 配置示例 2.nginx状态模块 ngx_http_stub_status_module`模块提供对基本状态信息的访问。 默认情况下不构建此模块,应使用 配置参数启用它 访问浏览器 nginx访问控制 基 ......

目录

nginx常用模块

1.目录索引模块

ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求,并生成目录列表。
当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module模块。
  • nginx 默认是不允许列出整个目录浏览下载
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 10.0.0.8:80;
        server_name www.qiqi.com;
        access_log /var/log/nginx/www.qiqi.com.access.log main;
        charset utf-8,gbk;

        location / {
                root /naonao/h5_games;
                index index.html;

        }
        location /download {
                alias /dir;
                autoindex on;
                autoindex_exact_size on;
                autoindex_localtime on;

        }

        location /favicon.ico {
                access_log off;
                return 200;
    }

        location /js/common.js {
                access_log /var/log/nginx/js.log main;
    }
}

2.nginx状态模块

ngx_http_stub_status_module模块提供对基本状态信息的访问。 默认情况下不构建此模块,应使用--with-http_stub_status_module`配置参数启用它

syntax: stub_status;
default: —
context: server, location
server {
    listen 80;
    server_name www.qiqi.com;
    access_log off;
 
    location /nginx_status {
        stub_status;
    }
}

访问浏览器

http://www.qiqi.com/nginx_status
active connections: 2 
server accepts handled requests
         373      373     695 
reading: 0 writing: 1 waiting: 1 


active connections  # 当前活动的连接数
accepts             # 当前的总连接数tcp
handled             # 成功的连接数tcp
requests            # 总的http请求数

reading             # 请求
writing             # 响应
waiting             # 等待的请求数,开启了keepalive

# 注意, 一次tcp的连接,可以发起多次http的请求, 如下参数可配置进行验证
keepalive_timeout  0;   # 类似于关闭长连接
keepalive_timeout  65;  # 65s没有活动则断开连接

nginx访问控制

基于ip的访问控制 http_access_module
基于用户登陆认证 http_auth_basic_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,其他全部允许
server {
    listen 80;
    server_name www.qiqi,com;
    access_log off;
 
    location /nginx_status {
        stub_status;
        deny 10.0.0.1;
        allow all;   
    }
}
  • 访问控制配置示例,只允许谁能访问,其他全部拒绝
server {
    listen 80;
    server_name www.qiqi.com;
    access_log off;
 
    location /nginx_status {
        stub_status;
        allow   10.0.0.0/24;
        allow   127.0.0.1;
        deny    all;
    }
}

登录认证模块

  • 基于用户登录认证配置语法
#访问提示字符串
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
  • 基于用户登录认证配置实践
#1.需要安装httpd-tools,该包中携带了htpasswd命令
[root@web01 ~]# yum install httpd-tools
#2.创建新的密码文件, -c创建新文件 -b允许命令行输入密码
[root@web01 ~]# htpasswd -b -c /etc/nginx/auth_conf zls zls #文件路径随意,验证时登录域名验证   


server {
        listen 10.0.0.8:80;
        server_name www.qiqi.com;
        access_log /var/log/nginx/www.qiqi.com.access.log main;
        charset utf-8,gbk;
        location /nginx_status{
                stub_status;
                stub_status;
                auth_basic "请输入密码";
                auth_basic_user_file auth_conf;
        }

    }

访问限制

在企业中经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问, 会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,请求数、进行限制。

ngx_http_limit_conn_module模块可以根据定义的key来限制每个键值的连接数,如同一个ip来源的连接数。

limit_conn_module 连接频率限制

limit_req_module 请求频率限制

连接限制

vim /etc/nginx/nginx.conf #主配置文件

http {
    limit_conn_zone $remote_addr zone=suibian:10m;
}

限制请求数量

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    location /search/ {
        limit_req zone=one burst=5 nodelay;
        limit_req_status 412;
        error_page 412 /xxx/err.html
    }
}
  • 使用ab工具进行压力测试
[root@oldboyedu ~]# yum install -y httpd-tools
[root@oldboyedu ~]# ab -n 20 -c 2  http://127.0.0.1/index.html
  • nginx日志结果
2018/10/24 07:38:53 [error] 81020#0: *8 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.driverzeng.com, request: "get /index.html http/1.0", host: "10.0.0.10"
2018/10/24 07:38:53 [error] 81020#0: *9 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.driverzeng.com, request: "get /index.html http/1.0", host: "10.0.0.10"
2018/10/24 07:38:53 [error] 81020#0: *10 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.driverzeng.com, request: "get /index.html http/1.0", host: "10.0.0.10"

nginx请求限制重定向

在nginx请求限制的过程中,我们可以自定义一个返回值,也就是错误页面的状态码。

默认情况下是503

server {
        listen 80;
        server_name module.driverzeng.com;
        charset utf-8,gbk;

        location / {
                root /code;
                index index.html index.htm;
                limit_req zone=req_zone burst=3 nodelay;
                limit_req_status 478
                #重定错误页面
                error_page 412 /err.html; #通常避免与过载冲突,定义412
        }
}

vim /code/err.html  
<img style='width:100%;height:100%;' src=https://www.driverzeng.com/zenglaoshi/478_page.png> #h5图片编写格式

nginx location 优先级

匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 3
!~ 区分大小写不匹配的正则 5
!~* 不区分大小写不匹配的正则 6
/ 通用匹配,任何请求都会匹配到

配置网站测试优先级

root@nginx conf.d]# cat testserver.conf 
server {
    listen 80;
    server_name www.driverzeng.com;
    location / {
        default_type text/html;
        return 200 "location /";
    }
 
    location =/ {
        default_type text/html;
        return 200 "location =/";
    }
 
    location ~ / {
        default_type text/html;
        return 200 "location ~/";
    }
 
    # location ^~ / {
    #   default_type text/html;
    #   return 200 "location ^~";
    # }
}