nginx 访问频率限制配置

配置文件如下:

#user  nobody;
worker_processes  auto;
worker_rlimit_nofile 100000;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  2048;
    multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream; 

    #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
    #以$binary_remote_addr 为key,限制平均每秒的请求为20个,
    #1M能存储16000个状态,rete的值必须为整数,
    #如果限制两秒钟一个请求,可以设置成30r/m

    limit_req_zone $binary_remote_addr zone=allips:50m rate=20r/s;
    limit_req_status 599;

   
    sendfile       on;
    tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    gzip  on;
    gzip_comp_level 6;
    gzip_vary on;
    gzip_min_length  1000;
    gzip_proxied any;
    gzip_types text/css application/json application/x-javascript text/javascript;
    gzip_buffers 16 8k;

    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        access_log  logs/host.access.log ;
        location / {
            proxy_pass http://local_tomcat/; 
            root   html;
            index  index.html index.htm; 

	    #限制每ip每秒不超过20个请求,漏桶数burst为5
            #brust的意思就是,如果第1秒、2,3,4秒请求为19个,
            #第5秒的请求为25个是被允许的。
            #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
            #nodelay,如果不设置该选项,严格使用平均速率限制请求数,
            #第1秒25个请求时,5个请求放到第2秒执行,
            #设置nodelay,25个请求将在第1秒执行。

            limit_req zone=allips burst=5 nodelay;                       
        }

        error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504 599 /50x.html;
        location = /50x.html {
            root   html;
        }        
    }

    upstream local_tomcat { 
        server localhost:8080;
      # server 192.168.0.159:8080;
    }  


}

频率提示页面50x.html内容:

<!DOCTYPE html>
<!-- saved from url=(0071)http://zhidao.baidu.com/question/962367477.html?entry=qb_browse_default -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>信息提示</title>        
<style type="text/css">
.layout-center .container {
	width:980px;
	margin:0 auto
}
.layout-left .container {
	margin:0 0 0 20px
}
.line:after,.clearfix:after {
	content:"\0020";
	display:block;
	height:0;
	clear:both;
	overflow:hidden;
	visibility:hidden
}
.grid {
	display:inline;
	float:left
}
.grid-r {
	display:inline;
	float:right
}
.wgt-none {
	margin-top: 60px;
	margin-left: 38px;
	margin-bottom: 400px;
}
.wgt-none .right-wraper {
	margin-left: 47px;
	margin-top: 63px;
	font-family: "Microsoft YaHei", SimHei, arial, "\5b8b\4f53";
}
.wgt-loading {
	margin-bottom: 200px;
	margin-left: 0;
	text-align: center;
}
.wgt-loading .loading-icon {
	padding: 30px 0;
}
.wgt-none .btn-re-index {
	width:106px;
	height:29px;
	line-height:29px;
	display:inline-block;
	font-size:14px;
	color:#fff;
	text-align:center;
	text-decoration: none;
	background:#4ec83b;
}
</style>
 <script language="javascript">
    	function reload() {document.location.reload();}
		function showtime(){
			var d = new Date();
			document.write((d.getMonth()+1)+"月"+d.getDate()+"日" + d.getHours()+"点"+d.getMinutes()+"分");			
		}
    	setTimeout("reload()", 1115000);
    </script>
</head>
    
<body class="layout-center">   
    <div id="body" class="container">        
        <nav class="wgt-nav f-12">
        <div class="wgt-none line">
            <img class="grid" src="http://img.iknow.bdimg.com/question/question-invalid.png">
            <div class="grid right-wraper">
                <div class="f-yahei f-20 mb-20">欢迎浏览我们的网站,你的IP访问过于频繁?有点小受不住哦。&gt;_&lt;!!</div>
                现在是:<script>showtime();</script>,正在重新连接中......<a class="btn-re-index" href="/">返回首页</a>
            </div>
      </div>
 
</body>
</html>


你可能感兴趣的:(nginx 访问频率限制配置)