nginx中limit_req_zone配置

下面是 nginx 官网上给的解释
limit_req_zone
Limit frequency of connections from a client. 
This module allows you to limit the number of requests for a given session, or as a special case, with one address.

Restriction done using leaky bucket. 

按照字面的理解,lit_req_zone的功能是通过 令牌桶原理来限制 用户的连接频率,(这个模块允许你去限制单个地址 指定会话或特殊需要 的请求数 )

以下是我的测试:

第一种情况:


1)注意配置的位置,现在http模块中声名,然后在server中引用(当然也可以在location中应用);

2)$binary_remote_addr : 客户端的IP; 

  100m是保存ip地址的,通常1M可以保存16000个ip信息;

  rate=12r/m 表示每分钟可以访问12次,平均5秒钟一次;

3)

public class HttpClientDemo {

	public static void main(String[] args) throws InterruptedException {
		for (int i = 0; i < 20; i++) {
			new Thread(getRunnable(i + ":")).start();
			Thread.sleep(500);
		}
	}

	private static Runnable getRunnable(final String threadName) {
		return new Runnable() {
			@Override
			public void run() {
				HttpGet httpGet = new HttpGet("http://localhost/index.html");
				CloseableHttpClient client = HttpClients.createDefault();
				CloseableHttpResponse execute = null;
				try {
					execute = client.execute(httpGet);
				} catch (ClientProtocolException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				int statusCode = execute.getStatusLine().getStatusCode();
				System.out.println(threadName + ":" + statusCode);
			}
		};
	}
}


运行的结果:只有一个200.(你可以去掉刚才的配置直接跑,结果会是全部200)


第二种情况:


添加了 burst=5;

直接在运行刚才的代码,看结果:


一个有6个状态是200的,其中5个是在最后的,这五个就是暂存在burst中的.

(时间太长了,超过了gif工具录制时长)

第三种情况:


看结果:


自己跑一下三个情况,你就明白了!


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值