有用 nginx 的限访问频率的 ngx_http_limit_req 模块吗?排除性限制如何做?

2023-03-25 23:51:50 +08:00
 herozzm

现在看到的资料都是全局性的限制高频率访问的 ip ,但是这样会把爬虫也给限制了,影响了网站排名。 我不想限制搜索引擎爬虫(需要正常放行),比如 Googlebot 和 baiduSpider ,该怎么做呢?求助大家 我的目前的配置可以全局限制访问 ip 频率,问了 chatGPT 半天,它也给不出正确答案,看看老铁的厉害

http {
  # ...
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=15r/m;
    
    server {
          location ~ \.php {
                 limit_req zone=mylimit burst=5 nodelay;
         }
    }
}
1095 次点击
所在节点    问与答
12 条回复
lhbc
2023-03-26 01:49:05 +08:00
ab
2023-03-26 02:33:57 +08:00
# 蜘蛛白名单
map $http_user_agent $limit{
default $binary_remote_addr;
~*(Baiduspider|360Spider|bingbot|Googlebot|Sogou|YoudaoBot|Sosospider) "";
}
limit_req_zone $limit zone=myqps:30m rate=2r/s;

limit_req zone=qps burst=10 nodelay;
limit_req_status 429;
ab
2023-03-26 02:34:56 +08:00
后两行用于 server 段
herozzm
2023-03-26 02:51:01 +08:00
@ab 当遇到搜索引擎把`limit_req_zone`的`key`设为""空字符串是啥含义?会有什么问题吗?
ab
2023-03-26 02:59:19 +08:00
@herozzm #4 这样不就可以放行了吗?
herozzm
2023-03-26 03:04:19 +08:00
@ab 我测试一下,我是没太理解为空的含义,$binary_remote_addr 是以 ip ,我知道
ab
2023-03-26 04:44:03 +08:00
@herozzm #6 每个用户都有一堆参数可以当做限频属性。使用 ip 是因为 ip 的唯一性,别的参数都会误杀。那么你要放行例外,当然只能放空
yrj
2023-03-27 03:45:39 +08:00
你用 UA 做放行,那不是掩耳盗铃麽。。
herozzm
2023-03-27 04:11:09 +08:00
@yrj ua 确实不是好办法 你有更好的办法吗?手头也没有蜘蛛的 ip 地址
yrj
2023-03-27 06:16:18 +08:00
@herozzm 没啥好办法,就是建立 ip 数据库。
ab
2023-03-27 11:09:59 +08:00
@yrj 意思意思,门槛抬高一点就是了。哪里 100%的防守
herozzm
2023-03-27 11:42:05 +08:00

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

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

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

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

© 2021 V2EX