主 题
博客系统自文档 · 第 12/16 篇
目录 · 上一篇:事件驱动与模块解耦 · 下一篇:部署与增量发布
写在前面
安全不是单点:应用层守卫 + 网关限流 + 账号锁定 + 内容审核。本篇按 请求路径 列出防护层。
功能与体验
| 威胁 | 用户感受 | 防护 |
|---|---|---|
| 接口刷量 | 429 友好页 | Nginx + Throttler |
| 暴力破解 | 账号临时锁定 | Redis login:lock |
| 机器注册 | 图形验证码 | captcha + Redis |
| 违规内容 | 评论待审/禁言 | sensitive-word + RPG ban |
生产压测报告见 docs/生产环境安全压测报告-2026-06-18.md(对外需脱敏)。
设计与实现
双层限流
flowchart TD
Client[Client]
Nginx["Nginx limit_req zones"]
Nest["ThrottlerGuard 全局"]
Handler[Controller]
Client --> Nginx --> Nest --> Handler
Nginx(main.conf)示例 zone:
| zone | 用途 |
|---|---|
perip |
通用 API 15r/s |
rpg_perip |
RPG 30r/s |
static_perip |
静态 50r/s |
Nest ThrottlerGuard:进程内计数,最后一道兜底。
RPG 路由在 nginx 有 更长前缀 location,优先匹配专用限流。
认证安全
- 密码 RSA 传输 + bcrypt 存储
- refresh token 黑名单
- GitHub OAuth ticket 一次性
敏感词
sensitive-word模块:词库 + 审核队列- 命中可与 RPG 禁言 联动(
punishment.service)
连接上限
jiang-xia.top.conf:limit_conn conn_perip 50 防单 IP 占满连接;WebSocket 单独 limit_conn 20。
踩坑与取舍
- 限流过严影响 SEO 爬虫:静态与 HTML 用不同 zone。
- 429 响应:nginx 配置 JSON/HTML 友好错误页(
common-errors.conf)。 - 开发环境 Throttler 仍生效:本地压测注意调阈值或关 guard。
系列导航
- 导读 · 第 0 篇
- 下一篇:13 部署与增量发布
延伸阅读
deploy/nginx/README.mddeploy/nginx/conf.d/main.conf

全部评论(0)