ngx_http_auth_basic_module模块允许适应HTTP基本身份的验证,验证用户名和密码对资源的限制访问
- 使用htpaswd创建新的密码文件, -c创建新文件 -b允许命令行输入密码
- 参数语法
#使用HTTP基本身份验证协议启用用户名和密码验证
Syntax auth_basic string| off;
Default auth_basic off;
Content:http,server,location,limit_except
#指定保存用户名和密码的文件
Syntax:auth_basic_user_file file;
Default: -
Context:http,server,location,limit_exce
指定保存用户名和密码的文件,格式:
#可以使用httpasswd程序或openssl passwd 命令生成对应的密码;
name1:passwd1
name2:passwd2
#使用htpaaswd创建的密码文件,-c创建文件,-b允许命令行输入密码
[root@wulin ~]# yum install httpd-tools -y
[root@web01 conf.d]# rpm -ql httpd-tools
/usr/bin/ab #压测工具
/usr/bin/htpasswd #生成密码工具
[root@wulin ~]# htpasswd -b -c /etc/nginx/auth_pass wulin 123
[root@web01 conf.d]# cat /etc/nginx/auth_pass
wulin:$apr1$Cpuo1Dul$pE1Fh8KKf8OiP9SDCF0Xj.
#安全:缩小权限
ll /etc/nginx/auth_pass 查看
chmod 600 /etc/nginx/auth_pass 执行
chown www.www /etc/nginx/auth_pass
配置文件
[root@web01 conf.d]# cat mirrors.wulin.org.conf
server {
listen 80;
server_name mirrors.wulin.org;
charset utf-8;
root /data; #正常站点目录
location / {
index index.html; #阿里云镜像首页
}
#yum仓库目录
location /centos/ {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location /admin/ { #网站后台,先进行办公源地址访问。
#用户名密码验证
auth_basic "wulin Auth access";
auth_basic_user_file /etc/nginx/auth_pass;
}
}
!nginx 检查语法
打开浏览器进行网站访问
企业案例
1.网站后台(结合LDAP统一认证,活动目录域控制):
邮箱、服务器、SVN、GIT、openvpn、PC密码、wiki、wify。
入职后HR开邮箱,一套用户、密码走遍公司。用户角色和权限是分离的,权限归宿各部门负责。
(后期编写ldap架构文章)
ngx_http_auth_basic_module局限性**
- 用户信息依赖文件
- 操作管理机械,效率低
解决方式:
- nginx结合LUA实现高效验证
- nginx配合LDAP打通,利用nginx-auth-ldap模块
Nginx请求限制、并发限制、限速模块
1.Nginx请求数、并发连接及下载速度限制主要有三个模块:
-
请求数频率限制:
限制某个客户端在单位时间内同时访问的Http请求数,
由ngx_http_limit_req_module实现。 -
并发连接频率限制:
限制同一时间的并发数,使用ngx_http_limit_conn_module实现。 -
下载限速:
限制客户端下载资源的速度,使用ngx_http_core_module实现
ngx_http_limit_req_module模块: #limit_req 限制请求
用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。限制是使用“泄漏桶”方法完成的
什么是限速?
限速分为两类:
1)限制某个客户端在单位时间内同时访问的Http请求数,
2)限制客户端的下载速度
2.限速方式方法
请求数限制:limit_req
限制某个客户端在单位时间内同时访问的Http请求数,由ngx_http_limit_req_module实现。
连接限制:limit_conn
限制同一时间的并发数,使用ngx_http_limit_conn_module实现。
下载限速:
限制客户端下载资源的速度,使用ngx_http_core_module实现
3.限速的原理
网络传输中常用两个的流量控制算法:漏桶算法和令牌桶算法。这里的限制是使用“泄漏桶”方法实现的
漏桶算法(leaky bucket)
漏桶算法(leaky bucket)算法:
- 水(请求)从上方倒入水桶,从水桶下方流出(被处理);
- 来不及流出的水存在水桶(缓冲队列),慢慢以固定速率流出;
- 水桶满后水溢出(请求丢弃)
算法核心:缓存请求,匀速处理,多去请求直接丢弃
1)请求限制(limit_req)
limit_req_zone KaTeX parse error: Expected 'EOF', got '#' at position 50: …m rate=1r/s; #̲ 定义限制的关键字[binary_remote_addr],用户来源的IP地址
# 定义内存区域,名称为one,大小10m
# 定义速率每秒处理1个请求。
实测配置:
http标签段定义请求限制, rate限制速率,限制一秒钟最多一个IP请求
参数:
Syntax: limit_req_zone key zone=name:size rate=rate;
#与连接配置相似.rate表示速率,以秒s为单位(rate=1r/s)
Default:-
Context:http
Syntax:limit_conn zone number [burst=number] [nodelay];
这里zone是第一部分的名字name;[]内为不可配置选项
Default:-
Context:http,server.location
基于来源IP对下载速率限制,限制每一秒处理1次请求,突发超过5个请求放入缓存区
#http 标签定义请求限制,rate限制速率,限制一秒钟最多一个IP请求
http {
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s
}
server {
listen 80;
server_name mirrors.wulin.org;
#请求超过1r/s,剩下的将被延迟处理,请求超过burst定义的数量,则返回503
limit_req zone=req_one burst=5 nodelay;
location / {
root /data;
index index.html;
}
}
burst与nodelay
#通过设置burst参数,可以允许nginx缓存处理一定程度的突发,多余的请求可以先放到队列里,慢慢处理,这起到了平滑流量的作用,但是如果队列设置的比较大,请求排队的时间就会比较长,这对用户很不友好
#有处理办法呢?
nodelay参数运行请求在排队的时候就立即被处理,也就是说只要请求能够进入burst队列,就会立即被后台worker处理,这意味着burst设置了nodelay时,系统瞬间的QPS可能会超过rate设置的闵值;nodelay参数要跟burst参数要跟burst一起使用才有作用
限制客户端同一时刻并发连接数
参数:
#在内存中开辟一个区域对于指定的nginx变量(key,例如:binary_remote-addr)进行限制,name表中申请空间名字,size表示空间大小
Syntax: limit_conn_zone key=name:size;
Default:-
Context:http
Syntax:limit_coon zone number;#这里的zone就是第一部分设置的名字name,number
[root@web01 conf.d]# cat mirrors.wulin.org.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s; #这个放此处即可
server {
listen 80;
server_name mirrors.wulin.org;
charset utf-8;
root /data; #正常站点目录
location / {
index index.html; #阿里云镜像首页
}
#yum仓库目录
location /centos/ {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_req zone=req_one burst=5 nodelay;
# 请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量,则返回503
}
location /admin/ { #网站后台,先进行办公源地址访问。
auth_basic "wulin Auth access";
auth_basic_user_file /etc/nginx/auth_pass;
}
}
#burst与nodelay
#通过设置burst参数,可以允许Nginx缓存处理一定程度的突发,多余的请求可以先放到队列里,慢慢处理,这起到了平滑流量的作用。但是如果队列设置的比较大,请求排队的时间就会比较长,这对用户很不友好。
#有什么解决办法呢?nodelay参数允许请求在排队的时候就立即被处理,也就是说只要请求能够进入burst队列,就会立即被后台worker处理,请注意,这意味着burst设置了nodelay时,系统瞬间的QPS可能会超过rate设置的阈值。nodelay参数要跟burst一起使用才有作用。