0 测试未限制情况下的访问
yum install -y httpd-tools
ab -n 100 -c 10 http://tianyun.me/
vim /etc/nginx/nginx.conf
定义: limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
限制请求 二进制地址 限制策略的名称 占用10M空间 允许每秒1次请求
引用
. limit_req zone=req_zone;
引用 限制策略的名称
配置
http {
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; 定义
vim /etc/nginx/conf.d/default.conf
server {
location / {
root /usr/share/nginx/html;
index index.html index.htm;
limit_req zone=req_zone; 引用
#limit_req zone=req_zone burst=5;
#limit_req zone=req_zone burst=5 nodelay;
}
}
}
引用限制
引用限制,但是令牌桶有5个。有延迟。速度慢
引用限制,但是令牌桶有5个。无延迟。速度快
burst=5 表示最大延迟请求数量不大于5。 如果太过多的请求被限制延迟是不需要的 ,这时需要使用nodelay参数,服务器会立刻返回503状态码。
yum install -y httpd-tools
ab -n 100 -c 10 http://tianyun.me/
tail -f /var/log/nginx/error.log
limiting requests //由于限制请求导致。
目的
通过IP地址,限制链接(TCP)。但是实验环境无法测试
vim /etc/nginx/nginx.conf
http {
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
}
vim /etc/nginx/conf.d/default.conf
server {
location / {
...
limit_conn conn_zone 1;
}
}
详解:
limit_conn:该指令指定每个给定键值的最大同时连接数,当超过这个数字时返回503(Service )错误。如(同一IP同一时间只允许有2个连接):
limit_conn:该指令指定每个给定键值的最大同时连接数,当超过这个数字时返回503(Service )错误。如(同一IP同一时间只允许有2个连接):
客户端的IP地址作为键。注意,这里使用的是 binary_remote_addr 变量,而不是 remote_addr 变量。
remote_addr变量的长度为7字节到15字节,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。
limit_conn_zone $binary_remote_addr zone=conn_zone:10m模块开启对单个ip、单个会话同时存在的连接数的限制。这里定义一个记录区conn_zone,conn_zone的总容量是10m,该记录区针对于变量 $binary_remote_add生效,这里是针对单个IP生效。该模块只是一个定义,配置在http配置段,需要配合limit_conn指令使用才生效, limit_conn conn_zone 1表示该location段使用conn_zone定义的 limit_conn_zone ,对单个IP限制同时存在一个连接。
单个IP,同时只允许有一个tcp连接
yum install -y httpd-tools
ab -n 100 -c 10 http://服务器IP地址/
module:ngx_http_access_module
Directives
allow 允许某些主机
deny 拒绝某些主机
Syntax:
Syntax: allow address | CIDR | unix: | all;
Context: http, server, location, limit_except
启用控制
1 限制主机访问
vim /etc/nginx/conf.d/default.conf
server {
allow 10.18.45.65; //允许访问
allow 10.18.45.181; //允许访问
deny all; //其它都步允许
}
2 测试
只有允许的才能访问;其他都无法访问
module :ngx_http_auth_basic_module
Syntax:
方法一
Syntax: auth_basic string | off;
Context: http, server, location, limit_except
方法二
Syntax: auth_basic_user_file file;
Context: http, server, location, limit_except
1. 建立认证文件
yum install -y httpd-tools 生成秘钥的工具是由apache提供
htpasswd -cm /etc/nginx/conf.d/passwd user10 会话密码
htpasswd -m /etc/nginx/conf.d/passwd user20 会话密码
cat /etc/nginx/conf.d/passwd 观察口令文件是否生成。已生成
2. 启动认证
vim /etc/nginx/conf.d/default.conf
找到server{字段,在下一行插入认证字段。
server {
auth_basic "nginx access test!"; 提示消息引用认证文件
auth_basic_user_file /etc/nginx/conf.d/passwd;
...
}
3.重启并验证