首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Nginx 限流:如何保护你的服务器免受暴力破解攻击

Nginx 限流:如何保护你的服务器免受暴力破解攻击

作者头像
用户5741377
发布2026-06-22 21:35:56
发布2026-06-22 21:35:56
1750
举报

你的 Web 应用每天都在面对各种自动化攻击,其中最常见的一种就是 暴力破解登录 —— 黑客会不停尝试不同的用户名和密码,直到猜中为止。

暴力破解不仅有安全风险,还会把你的服务器拖慢,甚至直接干趴。

如果你的站点是通过 Nginx 对外服务,那你已经有了非常好用的防御工具 —— 限流(Rate Limiting)

这篇文章会手把手教你如何使用 Nginx 的限流功能来减少暴力破解尝试,并附上常用配置和最佳实践。

为什么要做限流?

限流并不是“可选项”,而是非常必要的安全措施,因为:

  • 防止暴力破解登录,限制单个 IP 重复尝试密码
  • 保护服务器资源,避免被恶意流量拖垮
  • 让资源使用更公平,避免某个用户或脚本把服务器占满
  • 增强整体安全性,配合 WAF、防火墙、监控构成多层防御

一句话总结: 限流 = 防止被薅秃 = 提升系统安全与稳定性

Nginx 的限流功能有哪些?

Nginx 提供两个核心限流模块:

  1. limit_req_zone + limit_req:限制每秒/每分钟的请求数(常用于登录接口)
  2. limit_conn_zone + limit_conn:限制同时连接数(常用于下载、流媒体)

防暴力破解主要使用 请求限流

Step 1:定义一个限流区域(limit_req_zone)

首先需要在 http {} 里定义一个限流区域,用来记录每个客户端(IP)的请求情况。

代码语言:javascript
复制
http {

    # 定义名为 one 的限流区
    # 10MB 内存,可存约 16 万个 IP
    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/m;

    server {
        listen 80;
        server_name example.com;

        location /login {

            # 使用限流区 one
            limit_req zone=one burst=10 nodelay;

            proxy_pass http://backend;
        }

    }
}

配置说明:

  • $binary_remote_addr:按 IP 地址限流
  • rate=5r/m:每个 IP 每分钟最多 5 次请求
  • burst=10:允许瞬间突发多 10 次(超过就被拒绝)
  • nodelay:超过限制就直接返回错误,不排队

对于登录接口,这个限流已经非常严格,可以大幅降低暴力破解成功率。

Step 2:测试限流效果

测试是否生效:

代码语言:javascript
复制
for i in {1..20}; do curl -I http://example.com/login; done

当超过限制后,你会看到:

代码语言:javascript
复制
HTTP/1.1 503 Service Temporarily Unavailable
说明限流已开始工作。


Step 3:自定义限流后的提示页面
你可能不想让用户看到默认的 503 错误,这里可以自定义返回内容:
server {
    listen 80;
    server_name example.com;
    error_page 503 @custom_limit;
    location @custom_limit {
        return 429 "请求太频繁,请稍后再试。";
    }
    location /login {
        limit_req zone=one burst=10 nodelay;
        proxy_pass http://backend;
    }
}
现在当用户触发限流,会看到更友好的提示。


Step 4:更多可选优化与技巧
✔ 登录接口:限得越严格越好
例如:
  • 5 次/分钟
  • burst=5

✔ API 接口:限制要合理,不要误伤用户 例如:

  • 30 次/秒

✔ 静态资源不需要限流 CSS/JS/图片一般不限制。 ✔ 白名单 IP(如公司内网、管理员 IP) location /login { allow 192.168.1.100; # 内部管理员 deny all; limit_req zone=one burst=10 nodelay; proxy_pass http://backend; } 特别提醒: 限流不是万能的,但它是非常重要的一层防御。 你还应该:

  • 强制 HTTPS,避免密码被截取
  • 使用 强密码策略 + 登录失败次数限制
  • 配合 验证码 / MFA 多因子认证
  • 使用 Fail2ban 等工具根据日志自动封 IP
  • 定期监控 Nginx 日志
    • /var/log/nginx/access.log
    • /var/log/nginx/error.log

    安全不是“做一次就完”,而是“持续防御”。


  • 限制登录接口请求频率
  • 阻断暴力破解攻击
  • 降低恶意流量对服务器的冲击
  • 让系统更稳定、更安全

只需要几行配置, 你的应用安全性就能提升一个档次。 END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps和k8s全栈技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要做限流?
  • Nginx 的限流功能有哪些?
  • Step 1:定义一个限流区域(limit_req_zone)
  • Step 2:测试限流效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档