ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

nginx限流限速

2021-08-29 12:00:35  阅读:246  来源: 互联网

标签:限制 zone req 限速 server nginx 限流 limit conn


应用场景

下载限速

限制用户下载速度,使用Nginx ngx_http_core_module模块。

请求限制

限制用户一定时间内可以产生的Http请求数,使用Nginx ngx_http_limit_req_module。

连接限制

限制同一时间用户可以产生的连接数及并发数,使用Nginx ngx_http_limit_conn_module。

场景实践

eg1 基于来源IP对下载速率限制,限制每秒处理1次请求,但可以将5个请求放入缓存区。

#基于$binary_remote_addr参数做限制,在内存中开辟一个名为req_one大小为10M的空间来存放每个IP对应的访问频次信息,限制速率为每秒1个请求。
http {
	limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
}
server	{
	listen 80;
	server_name mirror.atlas.com;
#请求超过1r/s剩下的放入缓存延迟处理,超过burst值后返回503。
	limit_req zone=req_one burst=3 nodelay;
	location / {
	root /code;
	index index.html;
	}
}

eg2 设置共享内存区域和给定键值的最大允许连接数,超过限制返回503。

http {
	limit_conn_zone $binary_remote_addr zone=conn_mg:10m;
}
server	{
	listen 80;
	server_name mirror.atlas.com;
#最多允许两个连接。
	limit_conn conn_mg 2;
	location / {
	root /code;
	index index.html;
	}
}

eg3 限制下载速度。

server	{
	listen 80;
	server_name mirror.atlas.com;
#限制100M后下载速度降到100K。
	limit_rate_after 100m;
	limit_rate 100k;
	location / {
	root /code;
	index index.html;
	}
}

eg4 限制web服务器请求处理速度为1秒1个,触发值为5、限制用户仅可同时下载一个文件。当下载超过100M时限制下载速度为500K。如果同时下载超过2个视频,则返回提示“请充值”。

#在http块中定义请求zone和连接zone的内存区域名称和大小。
http {
	limit_req_zone $binary_remote_addr zone=req_mg:10m rate=1r/s;
	limit_conn_zone $binary_remote_addr zone=conn_mg:10m;
}
server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
	autoindex on;
	autoindex_exact_size off;
	autoindex_localtime on;
	#限制请求处理速度1秒1个,最多缓存5个请求。
	limit_req zone=req_mg burst=5 nodelay;
	#限制最多1个连接,下载超过100M后限速到500K,超过连接限制返回503时定向到errpage返回请充值。
	limit_conn conn_mg 1;
	limit_rate_after 100m;
	limit_rate 500k;
	error_page 503 @errpage;
	location @errpage {
		default_type text/html;
		return 200 '请充值';
	}
	location / {
		index index.html;
	}
}

标签:限制,zone,req,限速,server,nginx,限流,limit,conn
来源: https://www.cnblogs.com/atlas-777/p/15202236.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有