Nginx 限流与防恶意下单
开店久了一定会遇到有人拿脚本刷你。多数不是针对你,只是自动化扫描顺手扫到。
一、Nginx 层限流
在 http 块里定义限流区:
# 按 IP 限流:每秒 10 个请求,突发 20
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
# 登录接口更严:每分钟 5 次
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
# 并发连接限制
limit_conn_zone $binary_remote_addr zone=conn:10m;
在 server 块里应用:
location / {
limit_req zone=general burst=20 nodelay;
limit_conn conn 10;
# ...
}
location ~ ^/(user/authentication|admin) {
limit_req zone=login burst=3 nodelay;
# ...
}
:::warning burst 别设 0
设为 0 会让正常用户也被误伤——一个页面同时加载十几个静态资源是很正常的。burst 给的就是这个缓冲。
:::
二、挡掉扫描器
大量 404 通常是在扫后台路径和备份文件:
# 禁止访问敏感文件
location ~* \.(sql|bak|log|env|git)$ {
deny all;
}
# 按 UA 拦常见扫描器
if ($http_user_agent ~* (sqlmap|nikto|nmap|masscan|acunetix)) {
return 444;
}
444 是 Nginx 的特殊状态码:直接断开连接,不返回任何内容,比 403 更省资源。
三、业务层防护
Nginx 只能按 IP 限,换 IP 就绕过了。业务层要补上:
:::info 三层配合 Nginx 挡住无脑脚本,验证码挡住简单自动化,业务规则挡住有耐心的人工。三层都要有,任何一层单独用都会被绕。 :::
- 注册限制:装「防恶意注册/下单」插件,可以限制同 IP 注册数量、要求邮箱验证
- 人机验证:装 Turnstile 插件,在注册和下单环节加验证
- 下单频率:限制同一用户单位时间内的下单次数
- 订单超时:未支付订单 15 分钟自动关闭并释放库存,防止恶意占用库存
四、后台加固
- 修改默认后台入口地址
- 后台登录开启二次验证
- 限制后台可访问 IP(如果你的 IP 固定)
- 定期检查操作日志里的异常记录
最后一项容易被忽略——很多入侵是事后从日志里才发现的。
评论 0