配置文件如下:
#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访问过于频繁?有点小受不住哦。>_<!!</div>
现在是:<script>showtime();</script>,正在重新连接中......<a class="btn-re-index" href="/">返回首页</a>
</div>
</div>
</body>
</html>