feat(proxy): 实现代理节点批量升级回滚、隧道重定向跟随及远程配置管理

核心功能:
- 新增代理节点批量升级回滚工作流,支持分批升级、健康探针、跳过/重试/取消等操作
- proxy 隧道流处理器支持 HTTP 重定向跟随(最多 10 跳),区分 307/308 可重播与不可重播请求体
- proxy 协议新增 follow_redirects / http1_only 字段,网关侧同步支持
- 新增代理节点远端配置变更接口(名称、允许端口、调度状态、升级目标等)
- 新增代理节点注册/反注册/心跳的 Admin API,及节点过期清理维护任务
- gateway 隧道 owner-relay 支持流式代理大请求体,新增 5 MiB 默认限制
- 新增 ProxyNodeRegistrationMutation / ProxyNodeRemoteConfigMutation 数据类型
- proxy 配置新增重定向重播预算、心跳间隔等参数,TUI 安装向导同步更新
- 前端 ProxyNodes 页面新增批量升级操作面板及滚动进度展示
This commit is contained in:
fawney19
2026-04-12 16:02:38 +08:00
parent 7c5bb7f383
commit 9703840a36
83 changed files with 11832 additions and 1520 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -47,6 +47,7 @@
id="section-proxy"
:proxy-node-id="systemConfig.system_proxy_node_id"
:online-nodes="proxyNodesStore.onlineNodes"
:all-nodes="proxyNodesStore.nodes"
:loading="proxyConfigLoading"
:has-changes="hasProxyConfigChanges"
@save="saveProxyConfig"

View File

@@ -28,7 +28,7 @@
直连(不使用代理)
</SelectItem>
<SelectItem
v-for="node in onlineNodes"
v-for="node in selectableNodes"
:key="node.id"
:value="node.id"
>
@@ -44,6 +44,7 @@
</template>
<script setup lang="ts">
import { computed } from 'vue'
import Button from '@/components/ui/button.vue'
import Label from '@/components/ui/label.vue'
import Select from '@/components/ui/select.vue'
@@ -61,9 +62,10 @@ interface ProxyNode {
port: number
}
defineProps<{
const props = defineProps<{
proxyNodeId: string | null
onlineNodes: ProxyNode[]
allNodes: ProxyNode[]
loading: boolean
hasChanges: boolean
}>()
@@ -72,4 +74,16 @@ defineEmits<{
save: []
'update:proxyNodeId': [value: string | null]
}>()
const selectableNodes = computed(() => {
if (!props.proxyNodeId) {
return props.onlineNodes
}
const exists = props.onlineNodes.some(node => node.id === props.proxyNodeId)
if (exists) {
return props.onlineNodes
}
const selected = props.allNodes.find(node => node.id === props.proxyNodeId)
return selected ? [selected, ...props.onlineNodes] : props.onlineNodes
})
</script>