{
	email {$CADDY_EMAIL}
}

# 反代到后端时，用 Caddy 实测到的对端地址覆盖 X-Real-IP，
# 防止客户端伪造 X-Forwarded-For 影响限流、审计和支付下单的 client_ip。
(backend_proxy) {
	header_up X-Real-IP {remote_host}
}

# 公开 API 反代片段：主站与选号网共用。
(public_api) {
	@api_sse {
		path /api/chats/events /api/admin/chats/events
	}

	handle @api_sse {
		reverse_proxy backend:8080 {
			flush_interval -1
			import backend_proxy
		}
	}

	handle /api/* {
		request_body {
			max_size 11MB
		}
		reverse_proxy backend:8080 {
			import backend_proxy
		}
	}

	handle /health {
		reverse_proxy backend:8080 {
			import backend_proxy
		}
	}
}

# 主站与过渡子域名共享同一套配置：域名迁移期间新旧域名同时可访问，
# 避免 DNS 缓存未生效导致部分用户打不开。迁移完成后可移除 h5.{$CADDY_DOMAIN}。
{$CADDY_DOMAIN}, h5.{$CADDY_DOMAIN} {
	encode zstd gzip

	header {
		Strict-Transport-Security "max-age=31536000"
		X-Content-Type-Options "nosniff"
		X-Frame-Options "DENY"
		Referrer-Policy "strict-origin-when-cross-origin"
		Permissions-Policy "camera=(), microphone=(), geolocation=()"
		Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' https: data: blob:; font-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'"
	}

	import public_api

	# 生产后台页面使用构建时配置的隐藏入口，旧 /admin 入口直接返回 404。
	@legacy_admin path /admin /admin/*
	handle @legacy_admin {
		respond 404
	}

	# 其余流量返回主站前端静态资源。
	handle {
		root * /srv/dist
		try_files {path} /index.html
		file_server
	}
}

# 选号网（hfb_show）：仅当 CADDY_SHOW_DOMAIN 有值时由部署脚本启用 conf.d/show.caddy。
# 未配置时 conf.d 为空，不影响主站。
import /etc/caddy/conf.d/*.caddy

# Beszel 自带登录与权限控制；单独子域避免与业务站点的 CSP、路由相互影响。
monitor.{$CADDY_DOMAIN} {
	encode zstd gzip

	request_body {
		max_size 10MB
	}

	reverse_proxy beszel:8090 {
		transport http {
			read_timeout 360s
		}
	}
}
