Files
home-docker/home-apps/demo-service-caddy.yaml
Junv (via Hermes) 570442bb0d fix: quote X-Forwarded-For header_up to avoid Caddy v2 replace mode dropping headers
- Both /api/* and catch-all handlers now use quoted Caddy placeholder
  syntax (e.g. "{http.request.header.X-Forwarded-For}") so Caddy evaluates
  them in 'set' mode instead of failing silently in 'replace' mode.
- demo-service-caddy.yaml ConfigMap: also added missing X-Forwarded-For
  header_up in the catch-all handler (was entirely absent).
2026-07-13 11:12:20 +10:00

66 lines
1.9 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: demo-caddy-config
namespace: home-apps
data:
Caddyfile: |
# Caddy for Demo Service — internal server, TLS handled by Nginx Ingress
:80 {
log {
output stdout
format json
}
# ── Custom error pages (canvas animation, served directly by Caddy) ──
handle_errors {
@html_errors expression `{err.status_code} in [401, 403, 404]`
handle @html_errors {
root * /app/static
rewrite * /error-page.html
file_server
}
}
# ── Root path: API handles auth (logged in → /admin, else → error page) ──
handle_path / {
reverse_proxy localhost:3000
}
# Management API → Python service
handle /api/* {
reverse_proxy localhost:3000 {
header_up Host {host}
header_up X-Forwarded-For "{http.request.header.X-Forwarded-For}, {remote_host}"
header_up X-Forwarded-Proto https
}
}
# Admin Web UI → Python service
handle /admin {
reverse_proxy localhost:3000
}
handle /admin/* {
reverse_proxy localhost:3000
}
# ── Site content: API handles visibility + auth ──
# Public sites served without auth; drafts require login
handle {
rewrite * /site-content{uri}
reverse_proxy localhost:3000 {
header_up Host {host}
header_up X-Forwarded-For "{http.request.header.X-Forwarded-For}"
header_up X-Forwarded-Proto https
header_up Cookie {http.request.header.Cookie}
}
}
header {
X-Content-Type-Options nosniff
X-Frame-Options SAMEORIGIN
-Server
}
}