feat: 上游 1.0.3-1.0.5 同步第 1-8 项(v1.2.2)
剪贴板:新增 web/src/utils/clipboard.ts,5 处调用点支持非 HTTPS 环境(对齐 1.0.4) 日志中心:新增「FRP 日志」Tab,解析 frpc 日志为 时间/级别/来源/消息(对齐 1.0.3) 通知:单通道密文解密失败不再拖垮整份配置(对齐 1.0.5);容器补 TZ + tzdata(对齐 1.0.4);Telegram 代理自动补 http:// 并校验 scheme(对齐 1.0.3) 反向代理:复制不再追加「-复制」(对齐 1.0.5);监听占用校验合并表单规则与手动 Nginx 配置两张表(迁移 024 + endpoints 解析器),冲突提示写明占用规则;改端口的并发冲突改为可读提示 FRP:frps 弹窗补「VPS 防火墙放行 TCP 远程端口」提示(对齐 1.0.3);反代配置弹窗补齐内容区内边距与来源说明 文档:新增 docs/upstream-sync-plan.md(逐版本对照 + 第 5 项详细整理);VERSION 与 CHANGELOG 记 v1.2.2
This commit is contained in:
@@ -101,6 +101,10 @@ func (s *ProxyService) SaveRuleNginx(ctx context.Context, id int64, in SaveRuleN
|
||||
if err := s.store.SetNginxMode(ctx, id, "auto"); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
// 切回自动模式后,手动配置的占用记录不再适用
|
||||
if err := s.store.ClearCustomEndpoints(ctx, id); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
if err := s.applyNginx(ctx); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
@@ -118,9 +122,18 @@ func (s *ProxyService) SaveRuleNginx(ctx context.Context, id int64, in SaveRuleN
|
||||
if err := s.validateRuleNginxPending(ctx, rule, content); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
// 手动配置里的 listen/server_name 不进 proxy_hosts,需单独解析记录并校验占用,
|
||||
// 否则它与其它规则的同域名同端口冲突只会在 Nginx reload 时静默失效
|
||||
endpoints := nginx.ParseServerEndpoints(content)
|
||||
if err := s.store.EnsureEndpointsAvailable(ctx, endpoints, id); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
if _, err := nginx.SaveRuleCustomWithBackup(s.cfg, id, content); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
if err := s.store.ReplaceCustomEndpoints(ctx, id, endpoints); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
if err := s.store.SetNginxMode(ctx, id, "custom"); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
@@ -158,6 +171,15 @@ func (s *ProxyService) RollbackRuleNginx(ctx context.Context, id int64, backupNa
|
||||
if err := s.validateRuleNginxPending(ctx, rule, custom); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
endpoints := nginx.ParseServerEndpoints(custom)
|
||||
if err := s.store.EnsureEndpointsAvailable(ctx, endpoints, id); err != nil {
|
||||
// 备份文件已写回(与原有行为一致),占用记录需跟磁盘内容保持一致,避免留下过期占用
|
||||
_ = s.store.ReplaceCustomEndpoints(ctx, id, endpoints)
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
if err := s.store.ReplaceCustomEndpoints(ctx, id, endpoints); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
if err := s.store.SetNginxMode(ctx, id, "custom"); err != nil {
|
||||
return RuleNginxView{}, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user