nginx 屏蔽指定URI
-
背景
大多数服务器被恶意刷量,集中在个别接口,当服务器扛不住时可以暂时屏蔽被刷接口,或者根据指定querystring屏蔽请求
-
例子
比如有个播放接口 http://your.com/your/play?id=<视频id>
屏蔽该接口,在location / 之前加上
location ~ /play { return 403; }
如果日志里查出集中刷量的视频id可以临时屏蔽该视频,location /之前加上
location ~ /play { if ($arg_id ~ "222222|333333|其他被刷id") { return 404; } proxy_pass yourUpstream; }
此配置视频id为222222或者333333或者其他被刷id就会被404
-
常用if语句语法简介
-
if (a)判断a真假(字符串“0”为假)
-
if(a=1) a等于1 if(a!=1) a不等于1
-
if(a ~ "re")a匹配正则表达式,大小写敏感;~*大小写不敏感
-
-
limit_req简介(限制请求速率)
-
语法:
limit_req zone=name [burst=number] [nodelay];
-
例子
http块里定义zone limit_req_zone $binary_remote_addr zone=youku_zone:200m rate=200r/s;
http, server, location块里使用zone限速 limit_req zone=youku_zone burst=10 [nodelay];
表示以ip为key,每个ip限速200req/秒,超过该速度的就会被delay,delay超过10个就503。如果写上nodelay,则直接503
-