feat(nginx): openapi 全站启用按 IP 限流(轻防滥用档)

- 00-limits.conf 新增 limit_req_zone perip_req 10r/s + 429 状态码
  (zone 定义属服务器配置, 不入库)
- 站点 conf 443 server 块挂 limit_req burst=20 nodelay + limit_conn perip 10
- 域名直连无 CDN, binary_remote_addr 即真实 IP; 后端全绑 127.0.0.1 无死角
- 验证: 30 并发部分 429, 桶恢复后正常
This commit is contained in:
RRRosmontis
2026-09-23 15:05:14 +08:00
parent cba14eae25
commit 67aa9be3da
2 changed files with 8 additions and 1 deletions
+4 -1
View File
@@ -94,10 +94,13 @@
| 文件 | 作用 |
|---|---|
| `/etc/nginx/conf.d/openapi.rrrosmontis.icu.conf` | 统一入口站点(`proxy_pass` → `127.0.0.1:9008`) |
| `/etc/nginx/conf.d/openapi.rrrosmontis.icu.conf` | 统一入口站点(`proxy_pass` → `127.0.0.1:9008`;含按 IP 限流,见下) |
| `/etc/nginx/conf.d/00-limits.conf` | 限流 zone 定义(`perip` 连接数 / `perip_req` 请求速率)+ 429 状态码 |
| `/etc/nginx/conf.d/00-websocket.conf` | `$connection_upgrade` map 定义(**必须存在**) |
| `/home/openapi/nginx/**` | 宝塔导出的历史存档,非生效路径 |
**按 IP 限流(2026-09-23 启用,轻防滥用档)**:域名 DNS 直连本机(无 CDN),`$binary_remote_addr` 即真实客户端 IP,后端全绑 `127.0.0.1` 使 nginx 成为唯一入口、限流无死角。参数:`limit_req_zone ... rate=10r/s` + `burst=20 nodelay`,`limit_conn perip 10`;超出返回 **429**。验证:30 并发请求中部分被拒(429),桶恢复后正常。调整档位改 `/etc/nginx/conf.d/00-limits.conf`(速率)与站点 conf(burst/并发)后 `nginx -t && systemctl reload nginx`。
## Python 环境
- `/home/openapi/env/general` —— 五服务共用(flask / waitress / aiohttp / httpx / yt-dlp / jmcomic / pillow)
+4
View File
@@ -31,6 +31,10 @@ server {
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
# ---- 按 IP 限流(轻防滥用档,2026-09-23):10r/s burst 20、并发连接 10,超出 429 ----
limit_req zone=perip_req burst=20 nodelay;
limit_conn perip 10;
resolver 8.8.8.8 1.1.1.1 ipv6=off valid=300s;
# ---- 图片反代 i.pximg.net(原 apixiv.bu4.ren 逻辑,路径前缀 /img-master/)----