Nginx 限制资源的访问

2020-10-09 11:23:23 浏览数 (1)

Nginx可以限制

代码语言:javascript复制
每个键值(例如,每个IP地址)的连接数
每个键值的请求率(在一秒钟或一分钟内允许处理的请求数)
连接的下载速度
请注意,可以在NAT设备后面共享IP地址,因此应谨慎使用IP地址限制

限制并发

代码语言:javascript复制
http {
  .......... #省略部分内容 
  limit_conn_zone $binary_remote_addr$uri zone=xzbf:10m;
  limit_conn_status 503;

server {
  listen  80;

location / {
  root   html;
  limit_conn xzbf 1;
}
}
}
参数解释
代码语言:javascript复制
#定义名为xzbf的limit_zone,大小10M内存来存储session,用客户IP及访问uri作为键值进行存储,作为会话的判断基准,一个IP一个会话,也可以变量$server_name作为会话的判断基准
limit_conn_zone $binary_remote_addr$uri zone=xzbf:10m;

#限制发生时向客户端返回的错误码
limit_conn_status 503;

#设定最大并发连接数 如果并发请求超过这个限制,那么将返回预定错误limit_conn_status
limit_conn xzbf 1;

限制请求速率

代码语言:javascript复制
http {
  .......... #省略部分内容 
  limit_req_zone $binary_remote_addr$uri zone=xzqqsl:10m rate=1r/s; 

server {
  listen  80;
   
location / {
  limit_req zone=xzqqsl burst=5 nodelay;
  #limit_req zone=xzqqsl burst=5 delay=3;
}
}
}

参数解释

代码语言:javascript复制
#limit_req_zone 参数
zone=xzqqsl:10m  #内存区域大小为10m,并且设定了名称为xzqqsl
rate=1r/s    #表示请求的速率是1秒5个请求

#limit_req 参数
#表示这个参数对应的全局设置就是xzssql的那个内存区域
zone=xzqqsl

#表示队列的大小为5个请求,如果此时同一个客户端进来10个请求,那么只有5个请求可以按每秒一个的频率被处理,剩下五个将会拒绝处理,返回503状态码
burst=5 

#使用此配置时,前3个请求delay会立即传递,后2个请求burst- delay会以总速率不超过指定速率的方式被延迟,因为超出了总突发大小,其他多余的请求将被拒绝,后续请求将被延迟
delay=3

错误页面的设置

代码语言:javascript复制
http {
  .......... #省略部分内容 
  limit_req_zone $binary_remote_addr$uri zone=xzqqsl:10m rate=1r/s; 

server {
  listen  80;
  root html;
  error_page 503 /error_503.html;
location / {
  limit_req zone=xzqqsl burst=5 nodelay;
}
location = /error_503.html {
  root html;
}
}
}

限制带宽

代码语言:javascript复制
http {
limit_conn_zone $binary_remote_addr zone=down:10m;
server {
    listen 80;
    root /var/www/html;  #文件服务路径
location / {
  autoindex on;               #开启索引功能  
  autoindex_exact_size off;   #显示出文件的确切大小,单位是bytes
  autoindex_localtime on;     #显示文件大小
  limit_conn  down 1;   #限制同一个IP只能建立一个下载连接
  limit_rate_after 10m; #在10M以后的数据才开始进行速率限制
  limit_rate  100k;     #限制速率为100k
}
}
}

生成测试文件

代码语言:javascript复制
head -c 100000000 /dev/zero > /var/www/html/test  #生成一个100M文件

0 人点赞