初始化1
This commit is contained in:
107
memory/session-20260614-2.md
Normal file
107
memory/session-20260614-2.md
Normal file
@@ -0,0 +1,107 @@
|
||||
---
|
||||
name: session-20260614-2
|
||||
description: 2026-06-14 第2次会话 — 转发规则编辑弹窗新增"内容压缩"和"日志"两个Tab页
|
||||
metadata:
|
||||
type: session
|
||||
date: 2026-06-14
|
||||
sessionNumber: 2
|
||||
startTime: 2026-06-14T22:30:00+08:00
|
||||
endTime: 2026-06-15T00:40:00+08:00
|
||||
---
|
||||
|
||||
# 2026-06-14 第2次会话
|
||||
|
||||
## 会话摘要
|
||||
在Nginx转发管理编辑弹窗中新增了"内容压缩"(仿宝塔gzip配置)和"日志"(响应日志/错误日志)两个Tab页。全栈实现:数据库 → Python API → Java后端 → Vue前端。Python API已部署到10.1.1.160并测试通过。
|
||||
|
||||
## 关键操作
|
||||
|
||||
### 1. 新增"内容压缩"Tab(第4个标签页)
|
||||
- **做了什么**: 在编辑弹窗新增"内容压缩"Tab,包含:gzip开关、12种MIME类型复选框(与宝塔一致)、压缩级别(1-9)、最小压缩长度(支持k/m单位)
|
||||
- **涉及文件**:
|
||||
- `sql/gzip_migration.sql` — 4个新字段
|
||||
- `ForwardingRule.java` — gzipEnabled/gzipTypes/gzipCompLevel/gzipMinLength
|
||||
- `nginx_service.py` — parse_gzip_config()/set_gzip_config() 方法
|
||||
- `app.py` — GET/PUT `/api/nginx/rules/<domain>/gzip`
|
||||
- `PythonApiClient.java` — getGzipConfig/updateGzipConfig
|
||||
- `ForwardingRuleService.java` — getGzipConfig/updateGzipConfig(同步DB+Nginx)
|
||||
- `ForwardingRuleController.java` — GET/PUT `/{id}/gzip`
|
||||
- `nginxApi.js` — getRuleGzip/updateRuleGzip
|
||||
- `NginxForwarding.vue` — 内容压缩Tab(el-switch + el-checkbox-group + el-select)
|
||||
- **实现方式**: Python API直接修改Nginx配置文件中的gzip指令(正则删除旧的→插入新的→nginx -t→reload,失败自动回滚)
|
||||
- **结果**: 10.1.1.160已验证,gzip配置读写正常,nginx语法检查通过
|
||||
|
||||
### 2. 新增"日志"Tab(第5个标签页)
|
||||
- **做了什么**: 新增"日志"Tab,通过el-radio-button切换"响应日志"(access.log)/"错误日志"(error.log),支持最近50/100/200/500行
|
||||
- **涉及文件**:
|
||||
- `nginx_service.py` — get_domain_logs() 方法(tail + grep过滤域名)
|
||||
- `app.py` — GET `/api/nginx/rules/<domain>/logs?lines=N`
|
||||
- `PythonApiClient.java` — getDomainLogs
|
||||
- `ForwardingRuleService.java` — getDomainLogs
|
||||
- `ForwardingRuleController.java` — GET `/{id}/logs`
|
||||
- `nginxApi.js` — getRuleLogs
|
||||
- `NginxForwarding.vue` — 日志Tab(el-radio-group + el-textarea只读)
|
||||
- **结果**: 10.1.1.160已验证,日志读取正常
|
||||
|
||||
### 3. Bug修复
|
||||
- **问题**: set_gzip_config首次插入后,再次更新时旧的`# 内容压缩(gzip)`注释不会被删除,导致重复
|
||||
- **修复**: 在删除正则中增加对`# 内容压缩`注释行的清理
|
||||
- **结果**: 已修复并重新部署,确认干净
|
||||
|
||||
## 涉及文件清单
|
||||
|
||||
| 文件 | 操作 | 说明 |
|
||||
|------|------|------|
|
||||
| `sql/gzip_migration.sql` | 新增 | 安全迁移脚本(存储过程检查列是否存在) |
|
||||
| `ForwardingRule.java` | 改 | 新增4个gzip字段 |
|
||||
| `services/nginx_service.py` | 改 | 新增parse_gzip_config/set_gzip_config/get_domain_logs |
|
||||
| `app.py` | 改 | 新增gzip GET/PUT + logs GET 端点 |
|
||||
| `PythonApiClient.java` | 改 | 新增getGzipConfig/updateGzipConfig/getDomainLogs |
|
||||
| `ForwardingRuleService.java` | 改 | 新增gzip业务方法(同步DB+Nginx)+ logs方法 |
|
||||
| `ForwardingRuleController.java` | 改 | 新增 GET/PUT `/{id}/gzip` + GET `/{id}/logs` |
|
||||
| `api/nginxApi.js` | 改 | 新增getRuleGzip/updateRuleGzip/getRuleLogs |
|
||||
| `views/NginxForwarding.vue` | 改 | 新增内容压缩Tab + 日志Tab |
|
||||
|
||||
## 重要信息
|
||||
|
||||
### 部署状态
|
||||
- **Python API (10.1.1.160)**: 已部署,已验证gzip和logs端点 ✓
|
||||
- **备份**: `/opt/nginx-api-backup-20260614-224351`
|
||||
- **数据库迁移**: sql/gzip_migration.sql 待执行(MySQL 10.1.1.122)
|
||||
- **Java后端**: 编译通过,待用户部署
|
||||
- **Vue前端**: 编译通过(npm build 3.85s),待用户部署
|
||||
|
||||
### 编辑弹窗Tab结构(现在共5个Tab)
|
||||
1. 转发信息 — 始终可见
|
||||
2. 配置文件 — 仅编辑模式
|
||||
3. SSL — 仅编辑+HTTPS模式
|
||||
4. 内容压缩 — 仅编辑模式(新增)
|
||||
5. 日志 — 仅编辑模式(新增)
|
||||
|
||||
### gzip默认值
|
||||
- 开关: 关闭
|
||||
- MIME类型: 12种(与宝塔一致)
|
||||
- 压缩级别: 6
|
||||
- 最小长度: 1000(字节)
|
||||
|
||||
### 4. 全局gzip决策变更
|
||||
- **做了什么**: 用户要求去掉nginx.conf全局gzip,让每个域名通过页面独立控制。后又改为保留全局、隐藏Tab,最终又改回去掉全局、保留Tab
|
||||
- **最终结果**: 全局gzip已从 /etc/nginx/nginx.conf 移除(备份: nginx.conf.bak-20260615-002300),"内容压缩"Tab保留 `v-if="isEditing"`
|
||||
|
||||
### 5. 前端Bug修复 — gzipLoadedOnce未重置
|
||||
- **问题**: 开启gzip保存后关闭弹窗再打开,开关显示"关闭"
|
||||
- **根因**: `resetConfigState()` 重置了表单数据但没重置 `gzipLoadedOnce = false`,导致 `onTabChange` 跳过 `loadGzipConfig()`
|
||||
- **修复**: 在 `resetConfigState()` 添加 `gzipLoadedOnce = false`,同时简化 `onTabChange` 条件判断
|
||||
- **结果**: 每次打开弹窗都重新从服务器加载gzip配置
|
||||
|
||||
### 6. 未部署导致的"配置文件无gzip"问题
|
||||
- **现象**: 页面上开启压缩后,配置文件Tab看不到gzip指令
|
||||
- **根因**: Java后端未部署更新版(旧版无 /{id}/gzip 端点),PUT请求到不了Python API
|
||||
- **验证**: 直接在10.1.1.160上curl测试Python API,gzip读写均正常,nginx -t通过
|
||||
- **解决**: 需用户部署Java后端jar + Vue前端dist
|
||||
|
||||
## 待处理
|
||||
- [x] MySQL 数据库迁移已完成(4列添加成功:gzip_enabled/gzip_types/gzip_comp_level/gzip_min_length)
|
||||
- [x] 全局gzip已从nginx.conf移除
|
||||
- [ ] 用户部署Java后端和Vue前端
|
||||
- [ ] 验证完整前端→后端→Python API链路
|
||||
Reference in New Issue
Block a user