跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Nginx 能实现类似于 fail2ban 一样的,限制访问频率的效果吗?
未分類
6 3 月 2021

Nginx 能实现类似于 fail2ban 一样的,限制访问频率的效果吗?

Nginx 能实现类似于 fail2ban 一样的,限制访问频率的效果吗?

資深大佬 : Richard14 9

初学 Nginx,很多东西不是很懂,百度搜了一下没有类似解决方案。

想要实现的效果是用 NGinx 限制单个 IP 对登录 api 的调用次数,比如每 30 分钟里最多访问五次之类的。类似于 fail2ban,但是不用判断成功与否,到次数都一律屏蔽就对了。百度搜到的大多是每秒钟访问多少次的限制说明,感觉不是很符合需求

大佬有話說 (6)

  • 資深大佬 : Phant0m

    有限速模块 ngx_http_limit_req_module
    或者 ngx lua 自己写一个

  • 資深大佬 : wakzz

    ngx_http_limit_req_module 满足主的需求

  • 資深大佬 : LeeReamond

    @Phant0m
    @wakzz 感谢大佬回复,查了一下发现百度搜到的方法也是这个模块的,但是百度文章一般都没写模块全名,导致学的不是很清楚。我按照网上的配置方法,它需要先在 http 段里启用这个模块,然后再到 server 段里进行配置。我遇到一个问题是我的配置文件都是写在 /etc/nginx/conf.d 里的,但是这里的文件不允许修改 http 段,如果修改 /etc/nginx/nginx.conf 的话,比如加入下面这一句

    limit_req_zone $binary_remote_addr zone=example_com:10m rate=1r/s;

    不是对全局都加上 1r/s 的限制了么,感觉不太对啊。

    另外我在看 nginx.conf 的时候发现 gzip 模块居然默认是开的,但是我反向代理的时候返回的请求从来没被压缩过。。这是怎么回事

  • 資深大佬 : wakzz

    “`
    http {
    # 区域名称为 limit_ip,大小为 10m,同一个请求 IP 限流为每秒 1 次请求
    limit_req_zone $binary_remote_addr zone=limit_ip:10m rate=1r/s;
    # 设置拒绝请求或延迟处理请求的日志级别
    limit_req_log_level error;
    # 设置拒绝请求的响应状态码
    limit_req_status 503;
    …

    server {
    …

    # 仅登录接口做限流
    location /login {
    limit_req zone=limit_ip nodelay;
    …
    }

    # 其余接口不做限流
    location … {
    …
    }
    }
    }
    “`

  • 資深大佬 : LeeReamond

    @wakzz 感谢回复,已经配置成功,不过想问一下这个是不是还是基于秒内请求的配置,因为我设置了 10r/m 以后,得到的结果并不是一分钟以内访问 10 次就会被 ban,而是每 6 秒访问一次就会被 ban,感觉不是很符合需求啊。因为正常用户也会偶尔一下子多开几个网页,我希望可接受范围内的次数都能正常访问不受影响,他这个好像只要连续开第二个网页一定会 503 的样子

  • 資深大佬 : wakzz

    @LeeReamond 详细参数含义见官方文档 http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具