接口一直被人请求有什么办法解决

2017-02-23 15:43:18 +08:00
 dai269619118

每秒几百到几千的并发,占用好多资源

刚开始以为直接用 nginx 限制下速度就可以了和 ip

仔细一看请求的 ip 都是不一样的

有什么办法处理这个问题?

3683 次点击
所在节点    程序员
17 条回复
scloud
2017-02-23 15:49:49 +08:00
1.接口添加签名验证

2.代码添加访问速率检测

3.refer,cookie 等信息验证
234747005
2017-02-23 15:52:57 +08:00
if ($cookie_say != "hbnl$remote_addr"){
add_header Set-Cookie "say=hbnl$remote_addr";
rewrite .* "$scheme://$host$uri" redirect;
}
234747005
2017-02-23 15:53:17 +08:00
if ($http_user_agent ~* "Netscape/*|Chrome/19/*|WordPress/*|BaiduSpider/*|Baiduspider/*|Gecko/20100101|Firefox/3") {
return 403;
}
sampeng
2017-02-23 15:56:52 +08:00
楼上这个不可取。因为依然到达了程序层。

得在 nginx 层加防护。好像 iptable 就能禁止一个 ip 多次访问。

ip 再多不可能无上限,用脚本一算就知道有多少 ip 了。每个 ip 是不是只在请求这个接口,你应该有其他接口。如果一个 ip 只访问了 A 接口却没访问 B 接口。那你还不干掉他等着过年啊。

但这可能会误杀,小区宽带都是相同 ip 。

所以折中的方案是用个东西算这个 ip 是否有效请求。然后写一个黑名单, iptable 拦在外面。

这个东西是业务程序里还是直接分析 nginx 日志。就看你个人了。。
一般情况下分析 nginx 日志生成 ip 黑名单应该可以防护很大一坨恶意攻击。

另外服务器内核配置快速释放端口这样的优化,可以缓解资源被占用的情况。。每秒几百上千有点夸张了。几千个端口开着。很吃 cpu 的。。直接限制在 1000 个。其他的排队等去吧。
scloud
2017-02-23 16:02:44 +08:00
4.nginx_lua 配合 redis ,直接在 nginx 层去处理。上面 1,2,3 可以快速处理非法无效请求。后续优化可以用 4.
airqj
2017-02-23 16:26:04 +08:00
airqj
2017-02-23 16:27:07 +08:00
直接用 iptables 封掉请求次数太多的 IP
这比在 web server 层效率高很多
mhycy
2017-02-23 16:40:25 +08:00
搭车求问
在此需求场景下镜像流量应该可以实现请求审计能力且不影响主干业务的性能
不知现在有没有合适的开源解决方案?
salmon5
2017-02-23 16:53:26 +08:00
iptables 限制?如果有正常的业务突发并发呢?真是码农思维。
业务层做判断和限制。
既然知道你的接口规范了,肯定是合法的业务接入。
Felldeadbird
2017-02-23 16:53:48 +08:00
先看你的接口属性啊。私有的话,上动态 token ,加验证。反正增加对方的成本。在访问这些私有请求接口错误次数的,动态写入黑名单。 然后交由 nginx 和 iptables 去处理黑名单。

公开接口的话,限制单个 IP 请求次数咯。否则就是升级硬件。
holyzhou
2017-02-23 16:59:54 +08:00
@salmon5
@scloud
@sampeng
从主机层面做这个 一点都不优雅 还要扯到 iptables , 这是比较典型的运维式的解决办法了 ,觉得就应该从业务层面做。
donyee
2017-02-23 17:20:37 +08:00
收费,不给就统计损失 报警...
这个思路怎么样?
em70
2017-02-23 17:27:35 +08:00
看下日志,先把异常 UA 的封了,然后接口签名加密,再写个脚本每半个小时自动打印下前 100 位的 IP 访问列表及访问数,如果超过正常值就自动防火墙黑名单
fengxsong
2017-02-24 09:14:02 +08:00
既然是用 jtw 方式请求接口的话。。在前端 nginx 上判断有无这个 cookie 直接 return 403 就好了。。 LS 的 ngx_lua 也是一个方案,动态屏蔽这些很容易实现。
liyu4
2017-02-24 10:24:51 +08:00
ludan110
2017-02-24 14:58:22 +08:00
@holyzhou 如果是动态 ip 呢 一直在变
realpg
2017-02-25 23:06:56 +08:00
最省事的办法前面顶个百度云减速, 360 网站不安全卫士之类的 CDN

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/342642

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX