在现代 Web 服务中,为了防止恶意攻击、爬虫刷量或突发流量压垮服务器,合理地对用户请求进行限制显得尤为重要。Nginx 作为一款高性能的 Web 服务器和反向代理工具,提供了强大的请求限制功能。本文将手把手教你如何配置 Nginx请求限制,即使你是刚入门的小白也能轻松上手!
Nginx请求限制 是指通过配置规则,限制客户端在单位时间内可以发起的请求数量,或者限制连接数、并发数等,从而保护后端服务不被过载。常见的应用场景包括:
Nginx 主要通过两个模块实现请求限制:
limit_req_zone:定义限流区域(基于 IP、URI 等)limit_req:在具体 location 或 server 中应用限流规则下面是一个完整的配置示例,限制每个 IP 地址每秒最多访问 10 次某个 API 接口。
# 在 http 块中定义限流区域http { # 定义一个名为 "api_limit" 的限流区,使用 $binary_remote_addr(客户端 IP)作为 key, # 内存大小为 10MB,限制速率为每秒 10 个请求 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s; server { listen 80; server_name example.com; location /api/ { # 应用限流规则,burst=20 表示允许突发 20 个请求排队, # nodelay 表示不延迟处理突发请求(可选) limit_req zone=api_limit burst=20 nodelay; proxy_pass http://backend; } }} zone=api_limit:10m:创建一个名为 api_limit 的共享内存区,大小 10MB(约可存储 16 万个 IP)rate=10r/s:每秒允许 10 个请求(也可写成 600r/m 表示每分钟 600 次)burst=20:允许突发 20 个请求进入队列缓冲nodelay:立即处理突发请求,而不是按速率慢慢释放除了按 IP 限流,你还可以根据其他变量进行限制。例如,针对特定路径或爬虫 User-Agent 设置不同策略:
# 按 URI 限流limit_req_zone $uri zone=per_uri:10m rate=5r/s;# 按 User-Agent 限流(识别爬虫)map $http_user_agent $limited_bot { default ''; ~*(bot|crawler) 'bot';}limit_req_zone $limited_bot zone=bot_limit:10m rate=1r/s;location / { limit_req zone=per_uri burst=10; limit_req zone=bot_limit burst=2;} 配置完成后,如果发现限流未生效,请检查:
nginx -s reload)location 或 server 块中应用了 limit_reqlimiting requests 相关记录(查看 error.log)当请求被限制时,默认会返回 503 Service Temporarily Unavailable。你可以自定义错误页面:
error_page 503 /custom_503.html;location = /custom_503.html { internal; root /usr/share/nginx/html;} 通过合理配置 Nginx限流配置,你可以有效提升系统的稳定性和安全性。无论是防止恶意刷单,还是应对突发流量,Nginx防刷机制 都是你不可或缺的利器。掌握 Nginx速率控制 的基本方法,是每个运维和开发人员的必备技能。
现在就去试试吧!修改你的 Nginx 配置文件,加上限流规则,让你的服务更安全、更可靠!
本文由主机测评网于2025-11-25发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/202511558.html