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的功能是通过 令牌桶原理来限制 用户的连接频率,(这个模块允许你去限制单个地址 指定会话或特殊需要 的请求数 )

以下是我的测试:

第一种情况:

nginx中limit_req_zone配置_第1张图片

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)

nginx中limit_req_zone配置_第2张图片

第二种情况:

nginx中limit_req_zone配置_第3张图片

添加了 burst=5;

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

nginx中limit_req_zone配置_第4张图片

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

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

第三种情况:

nginx中limit_req_zone配置_第5张图片

看结果:

nginx中limit_req_zone配置_第6张图片

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


你可能感兴趣的:(nginx)