用户认证
有时我们会有这么一种需求,就是你的网站并不想提供一个公共的访问或者某些页面不希望公开,我们希望的是某些特定的客户端可以访问.
那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那些不速之客.
我们在服务课程中学习过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说已经处理完正在等候下一次请求指令的驻留连接.