Nginx (5)访问控制

文章介绍了如何使用Nginx实现访问控制,包括通过auth_basic进行身份认证,使用deny/allow规则设定黑白名单,以及利用geo和map模块进行分段限速。同时,文章提到了limit_rate指令限制客户端下载速度,以及通过status模块监控Nginx的状态统计。
摘要由CSDN通过智能技术生成

用户认证
有时我们会有这么一种需求,就是你的网站并不想提供一个公共的访问或者某些页面不希望公开,我们希望的是某些特定的客户端可以访问.
那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那些不速之客.
我们在服务课程中学习过apache的访问控制,对于Nginx来说同样可以实现,并且整个过程和Apache 非常的相似:
location / {
root html;
index index.html index.htm;
auth_basic "user&pass"; # 描述信息
auth_basic_user_file /usr/local/nginx/passwd.db; # 存放用户名和密码的文件
}
[root@web html]# htpasswd -c /usr/local/nginx/passwd.db user1

使用htpasswd 需安装 httpd-tools

创建第二个用户时不需要加-c选项,不然会覆盖掉之前的用户信息。

访问控制
方法一:deny/allow 顺序:从上到下
location / {
root html;
index index.html index.htm;
allow 192.168.10.0/24; #允许192.168.10.0这个网段全部用户
deny all; #拒绝其他所有人
}


方法二:黑/白名单
可以使用geo模块定义一个访问控制的黑/白名单
geo指令可以根据客户端的IP地址来给变量定义不同的值,语法如下:
例:禁止 192.168.10.11 和 127.0.0.1 访问
...
geo $black_list {            #geo模块放在http块中
default 0;                       #定义全部为0
192.168.10.11 1;           #定义此IP为1
127.0.0.1 1;
}
server {
listen 80;
server_name _;
root /usr/share/nginx/html;

if ($black_list) {      判断geo定义的变量的值,为真进入判断。
return 403;
}
...
}
...

客户端访问服务器是访问服务器下的文件,访问目录是不被允许的。如/后是目录会自动寻找此目录下的index.html文件,如没有会报403错误,不允许被访问。

如想要用户访问并下载此目录下的文件可以在server块里设置   autoindex on;

也可以对用户下载速度进行限制:

limit_rate指令: 限速
用法:
Syntax: limit_rate rate; # 1.17.0以上的版本支持使用变量作为limit_rate的值
Default: limit_rate 0;
Context: http, server, location, if in location

map指令
map指令根据一个字符串来定义另一个变量的值
用法:
Syntax: map string $variable { ... }
Default: —
Context: http

我们可以利用geo和map方便的实现分段限速:

geo $limit {
default 2;
192.168.10.11 1;
192.168.10.13 0;
}
map $limit $rate {
2 128k;
1 1m;
0 0;
}

server { ...
...
location /download/ {
autoindex on; # 当目录中没有 index 文件时列出文件列表, 默认为 off
limit_rate $rate;
}
...
}

limit_rate_after指令
就是在下载多少内容后再以limit_rate限制的速率下载,多用于浏览视频
先给你一点先看,再慢慢给你缓存观看,等你欲罢不能的时候,让你冲会员,冲完会员就快了
用法:
Syntax: limit_rate_after size;
Default:
limit_rate_after 0;
Context: http, server, location, if in location

例如:
location /flv/ {
limit_rate_after 500k;
limit_rate 50k;
}

状态访问统计:
在server中添加如下行
location = /status {
stub_status on;
access_log off; #不会把访问记录到日志中,减少磁盘I/O
allow 127.0.0.1; #只允许自己或者监控系统访问。
deny all;
}
查看访问状态统计:
浏览器:http://192.168.10.11/status 刷新可得到如下变化结果

Active connections: 557
server accepts handled requests
36573075 36573075 43806112
Reading: 3 Writing: 16 Waiting: 538

Active connections
活动连接数
server accepts handled requests
nginx总共处理了36573075个连接, 成功创建36573075次握手 (相等表示中间没有失败的), 总共处理了43806112个请求 (平均每次握手处理了1.2个数据请求).

Reading
nginx读取到客户端的Header信息数.
Writing
nginx返回给客户端的Header信息数.
Waiting
开启keep-alive的情况下,这个值等于active - (reading + writing),意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值