Fix HTTP deployment flow and redesign bindings workspace
This commit is contained in:
77
PRD.md
77
PRD.md
@@ -24,16 +24,16 @@
|
||||
### 2.1 流量链路
|
||||
|
||||
```
|
||||
调用方 (Client)
|
||||
│
|
||||
│ HTTPS (443)
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Nginx │
|
||||
│ 职责:TLS终止 / 路径路由 / │
|
||||
│ 静态文件 / 内网鉴权 / 粗粒度限流 │
|
||||
└────────────────┬────────────────────────┘
|
||||
│ HTTP 内网转发
|
||||
调用方 (Client)
|
||||
│
|
||||
│ HTTP (80)
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Nginx │
|
||||
│ 职责:路径路由 / │
|
||||
│ 静态文件 / 内网鉴权 / 粗粒度限流 │
|
||||
└────────────────┬────────────────────────┘
|
||||
│ HTTP 内网转发
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Key-IP Sentinel App │
|
||||
@@ -65,7 +65,7 @@
|
||||
| 缓存层 | **Redis 7+** | Token-IP 绑定热数据,TTL 7 天 |
|
||||
| 持久化层 | **PostgreSQL 15+** | 绑定记录与审计日志,使用 `inet`/`cidr` 原生类型做 IP 范围匹配 |
|
||||
| 前端管理 UI | **Vue3 + Element Plus** | 纯静态 SPA,打包后由 Nginx 直接托管 |
|
||||
| 外层网关 | **Nginx** | TLS 终止、路径隔离、静态文件、`limit_req_zone` 限流 |
|
||||
| 外层网关 | **Nginx** | 路径隔离、静态文件、`limit_req_zone` 限流 |
|
||||
| 部署方式 | **Docker Compose** | 共 4 个容器:nginx / sentinel-app / redis / postgres |
|
||||
|
||||
***
|
||||
@@ -122,26 +122,25 @@
|
||||
在 `nginx.conf` 中需要实现以下配置:
|
||||
|
||||
```nginx
|
||||
# 1. TLS 终止(HTTPS → HTTP 转发给 sentinel-app)
|
||||
# 2. 代理路径:/ 全部转发给 sentinel-app:7000
|
||||
# 3. 管理后台访问限制
|
||||
location /admin/ {
|
||||
allow 10.0.0.0/8; # 内网 IP 段
|
||||
allow 192.168.0.0/16;
|
||||
deny all;
|
||||
proxy_pass http://sentinel-app:7000;
|
||||
}
|
||||
# 4. 静态文件(前端 UI)
|
||||
location /admin/ui/ {
|
||||
root /etc/nginx/html;
|
||||
try_files $uri $uri/ /admin/ui/index.html;
|
||||
}
|
||||
# 5. 基础限流
|
||||
limit_req_zone $binary_remote_addr zone=api:10m rate=60r/m;
|
||||
# 6. 强制写入真实 IP(防客户端伪造)
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $remote_addr; # 覆盖,不信任客户端传入的值
|
||||
```
|
||||
# 1. 代理路径:/ 全部转发给 sentinel-app:7000
|
||||
# 2. 管理后台访问限制
|
||||
location /admin/ {
|
||||
allow 10.0.0.0/8; # 内网 IP 段
|
||||
allow 192.168.0.0/16;
|
||||
deny all;
|
||||
proxy_pass http://sentinel-app:7000;
|
||||
}
|
||||
# 3. 静态文件(前端 UI)
|
||||
location /admin/ui/ {
|
||||
root /etc/nginx/html;
|
||||
try_files $uri $uri/ /admin/ui/index.html;
|
||||
}
|
||||
# 4. 基础限流
|
||||
limit_req_zone $binary_remote_addr zone=api:10m rate=60r/m;
|
||||
# 5. 强制写入真实 IP(防客户端伪造)
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $remote_addr; # 覆盖,不信任客户端传入的值
|
||||
```
|
||||
|
||||
### 4.2 Sentinel App 反向代理模块
|
||||
- **受信 IP Header**:只读取 `X-Real-IP`(Nginx 写入的),忽略请求中原始的 `X-Forwarded-For`。
|
||||
@@ -337,15 +336,13 @@ version: '3.8'
|
||||
services:
|
||||
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
container_name: sentinel-nginx
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- ./nginx/ssl:/etc/nginx/ssl:ro
|
||||
- ./frontend/dist:/etc/nginx/html/admin/ui:ro
|
||||
image: nginx:alpine
|
||||
container_name: sentinel-nginx
|
||||
ports:
|
||||
- "80:80"
|
||||
volumes:
|
||||
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- ./frontend/dist:/etc/nginx/html/admin/ui:ro
|
||||
depends_on:
|
||||
- sentinel-app
|
||||
networks:
|
||||
|
||||
Reference in New Issue
Block a user