mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-01 16:44:23 +08:00
81 lines
3.4 KiB
Lua
81 lines
3.4 KiB
Lua
local m, s, gs, o
|
|
|
|
m = Map("caddy", translate("Caddy Host"),
|
|
translate("反向代理 Host 列表 (增删改查). 每条 Host 对应 Caddyfile 里一段 域名:端口 { ... }"))
|
|
|
|
----------------------------------------------------------------------
|
|
-- 通用开关 (全局, 单例 @caddy[0]). 放在 Host 列表上方: 跨所有 Host 生效,
|
|
-- 不是某一条 Host 的属性. 后续全局项 (如日志开关) 也加在这个 section 里
|
|
----------------------------------------------------------------------
|
|
gs = m:section(TypedSection, "caddy")
|
|
gs.addremove = false
|
|
gs.anonymous = true
|
|
gs.nodeps = true
|
|
|
|
o = gs:option(Flag, "disable_redirect", translate("保留 HTTP (禁用自动跳转 HTTPS)"),
|
|
translate("勾选 = Caddyfile 写 auto_https disable_redirects; 不勾 = 不写, Caddy 默认 HTTP 自动 301 到 HTTPS"))
|
|
o.default = 1
|
|
|
|
o = gs:option(Flag, "log_on", translate("请求日志"),
|
|
translate("勾选 = 各 Host 写访问日志到 [状态] 页的 日志 路径; 不勾 = Caddyfile 不生成 log 块, 不写日志, 省资源"))
|
|
o.default = 1
|
|
|
|
----------------------------------------------------------------------
|
|
-- Host (多条) - 增删改查, NPM 的 Proxy Hosts
|
|
----------------------------------------------------------------------
|
|
s = m:section(TypedSection, "proxy")
|
|
s.addremove = true
|
|
s.anonymous = true
|
|
s.nodeps = true
|
|
s.cfgtitle = "name"
|
|
|
|
o = s:option(Value, "name", translate("名称"),
|
|
translate("给这条 Host 起个名, 便于区分"))
|
|
o.rmempty = false
|
|
|
|
o = s:option(Flag, "enabled", translate("启用"))
|
|
o.default = 1
|
|
|
|
o = s:option(ListValue, "domain", translate("监听域名"),
|
|
translate("从 [Domain] 页的域名列表中选择. 每个域名列两个选项: 裸域 (签 example.com 一张证书, 覆盖裸域) 和 *. 通配符 (签 裸域+通配符 各一张, 覆盖裸域+全部子域, 等价 acme.sh 两条 -d). 只要 Domain 页填了 AK 就一律走 DNS-01, 不依赖 80/443 入站. 需先在 Domain 页创建域名"))
|
|
o.rmempty = false
|
|
-- 从 UCI 文件读 domain_name: 直接读 /etc/config/caddy, 匹配有引号和没引号两种风格.
|
|
-- 比 grep + sed 更稳 (不靠 shell pipeline 转义), 比 uci cursor 更简单 (不依赖 cursor API 版本差异).
|
|
local f = io.open("/etc/config/caddy", "r")
|
|
if f then
|
|
for line in f:lines() do
|
|
local dn = line:match("option%s+domain_name%s+'([^']+)'")
|
|
or line:match("option%s+domain_name%s+([%w%.%-]+)")
|
|
if dn and #dn > 0 then
|
|
o:value(dn)
|
|
o:value("*." .. dn)
|
|
end
|
|
end
|
|
f:close()
|
|
end
|
|
|
|
o = s:option(Value, "port", translate("监听端口"),
|
|
translate("非标端口可防指纹扫描, 例如 443 / 8443"))
|
|
o.datatype = "and(port,min(1))"
|
|
o.default = "443"
|
|
|
|
o = s:option(Value, "target", translate("转发目标"),
|
|
translate("内网后端地址, 形如 192.168.1.x:8080"))
|
|
o.rmempty = false
|
|
|
|
o = s:option(ListValue, "tls_cert", translate("TLS 证书"),
|
|
translate("auto = Caddy 自动签发+自动续签 (Domain 页填了 AK 走 DNS-01, 不依赖 80/443 入站); off = 纯 HTTP 不加密 (内网调试用)"))
|
|
o.default = "auto"
|
|
o:value("auto")
|
|
o:value("off")
|
|
|
|
o = s:option(Value, "api_key", translate("API Key (可选)"),
|
|
translate("留空 = Caddy 不做 key 校验 (交给后端); 填值 = Caddy 层校验 Authorization: Bearer <key>"))
|
|
|
|
o = s:option(TextValue, "extra", translate("自定义指令 (可选)"),
|
|
translate("Caddyfile 语法, 原样插入此 Host 块末尾. 用于 path 路由 / rate_limit / encode / basicauth / handle 等表单没覆盖的指令"))
|
|
o.rows = 6
|
|
o.wrap = "off"
|
|
|
|
return m
|