diff --git a/docs/部署与运维.md b/docs/部署与运维.md index 7f38dcf..81423d0 100644 --- a/docs/部署与运维.md +++ b/docs/部署与运维.md @@ -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) diff --git a/nginx/openapi.rrrosmontis.icu.conf b/nginx/openapi.rrrosmontis.icu.conf index 1b88781..d5a855e 100644 --- a/nginx/openapi.rrrosmontis.icu.conf +++ b/nginx/openapi.rrrosmontis.icu.conf @@ -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/)----