nginx禁止ip直接访问
方法一,ban
#别人如果通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500
server {
listen 80 default;
server_name _;
return 500;
}
#开放一个或多个真实的希望被访问的域名配置,设置如下:
server {
linten 80;
server_name www.domain.com;
}
方法二,跳转
#别人如果通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以将他跳转到正常的域名访问
server {
listen 80 dufault;
server_name _;
rewrite ^(.*) http://www.domain.net permanent;
}
#开放一个或多个真实的希望被访问的域名配置,设置如下:
server {
linten 80;
server_name www.domain.com;
}
关于rewrite:
rewrite | regex | replacement | flag |
---|---|---|---|
关键字 | 正则 | 替代内容 | flag标记 |
其中关键字error_log不能改变 | perl兼容正则表达式语句进行规则匹配 | 将正则匹配的内容替换成replacement | rewrite支持的flag标记 |
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
限制下载速度
location /download {
limit_rate 128k;
}
#如果想设置用户下载文件的前10m大小时不限速,大于10m后再以128kb/s限速可以增加以下配内容,修改nginx.conf文件
location /download {
limit_rate_after 10m;
limit_rate 128k;
}
限制链接并发数
HttpLimitZoneModule 限制并发连接数实例
limit_zone只能定义在http作用域,limit_conn可以定义在http server location作用域
http {
limit_conn_zone $binary_remote_addr zone = conn:10m;
#定义一个名为conn的limit_conn_zone用来存储session,大小是10M内存,1M能存储16000个状态;
#$binary_remote_addr是限制同一客户端ip地址;
#$server_name是限制同一server最大并发数;
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,1M能存储16000个状态,以$binary_remote_addr为key,限制平均每秒的请求为20个,rate的值必须为整数,如果限制两秒钟一个请求,可以设置成30r/m
server{
location {
limit_conn conn 20;
#limit_conn为限制并发连接数;
limit_rate 500k;
#limit_rate为限制下载速度;
limit_req zone=allips burst=5 nodelay;
#限制每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秒执行。
}
}