nginx的请求频率配置
nginx的limit_req_zone参数可以对请求进行限速,通俗的来说,就是同时只能有多少个请求进行处理,本文主要针对limit_req_zone一些参数的配置,以及实际使用的效果,进行详细的分析。
一、nginx限速limit_req_zone、limit_conn_zone
1、配置文件案例
#限速,每秒5个,内存区域10m,大概16万个session
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server
{
listen 80;
server_name xxx.xxx.xxx;
location / {
#缓存区队列burst=100个,不延期,即每秒最多可处理rate+burst个.同时处理rate个。
limit_req zone=one burst=100 nodelay;
proxy_pass http://service;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_intercept_errors on;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 120; #长时操作的设置
}
}
2、参数详解
2.1 limit_req_zone (全局配置)
zone:one:10m 表示一个内存区域大小为10m,并且设定了名称为one。
rate=5r/s 表示请求的速率是1秒5个请求,当单位设置成60r/m时,并不能达到限速1分钟60次的效果,它等同于1r/s。
$binary_remote_addr 表示远程的ip地址。
2.2 limit_req (server配置)
zone=one 表示这个参数对应的全局设置就是one的那个内存区域
burst=100 表示请求队列的长度。
nodelay 表示不延时,比如rate=5r/s,burst=10 那么来了15个请求,能一次搞定,否则,就是此秒只能搞定5个请求。一般都是不延期的设置。
3、burst详解及试验。
我们设定一个场景,一个nginx反向代理的后端服务单页请求数是30个,如果我们设置30r/s的话,那么这个burst设置就没有意义了,但是如果我们不想把rate设置成这么大,比如5r/s,也要完成这个一个页面30个请求的需求。这个时候burst就有作用了。(前后端一体化的服务,其静态资源单次刷新后,再访问时只会刷新动态请求)。
假设我们一个页面是30个请求,后面每秒都会刷新一个页面,但是新页面由于静态资源已经刷新,只有2-3个请求,因此我们把burst设置成200个(可以让用户连续强制刷新大约8次)。当我们第一次访问时,由于rate是5个,只能处理5个,另外的25个会放到burst队列,虽然设置成nodelay会把这25个也处理了,但是队列中占用的25个位置,需要25/rate=5秒来清除,如果第二次请求是3个,那么我们实时处理了3个请求,并且rate剩余2个可以清空burst队列,这个时候,队列就是占用了23个位置。最后如果我们队列满了的话,那么就会出现503的请求。
验证效果:基本按上面的方式,连续每秒30个请求,即f5强制刷新,那么大约会再多少次后出现503的情况呢,答案大约是8次(200/25).
4、错误页面的设置
在上面的server配置下,增加一个error_page ,配置一个loaction,注意这个用的是=/,它的优先级高于 /。因此不会去代理服务器找,直接就会再nginx下面的html找这个文件。
error_page 503 /error_503.html;
location = /error_503.html {
root html;
}
5、limit_conn_zone
limit_conn_zone这个是请求连接数的配置,和limit_req_zone类似,详细省略。
二、nginx的其他杂项。
2.1 路径详解
格式: location ??? { ..... }
优先级: 1、 = /xxx.html 2、 ^~ /images/ 3、 ~* \.(gif|jpg|jpeg|png|bmp|swf)$ 4、/static 5、/
详解:1表示完整匹配,用=和完全的路径匹配,比如 =/xxx.html 就匹配 xxx.html =/ 匹配根路径
2表示开头等于,优先级第二,越长就越能匹配,比如^~ /abc/cd ^~/abc 第一个会优先匹配/abc/cd/xxx
3表示不区分大小的正则,并且正则中含义是.jpg等结尾的,优先级第三,同样正则越长越高。
4表示开头等于/static/的,但是优先级比第二种低,是一种其他配置找不到再找它,越长就越能匹配。
5因为4说了是越长越能匹配,当能匹配/static/就不会匹配/,而/是所有其他的一个默认匹配。
注意:location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ { //正则与其他符号要空格。
2.2:补充一个nginx-win版本地址:http://nginx-win.ecsds.eu/download