별건 아니지만 나름 의미가 있을테니 설정을 남겨둡니다.
공용 Caddyfile
{ #email log { output file /var/log/caddy/access.log } } (default_https_header) { header { # enable HSTS +Strict-Transport-Security "max-age=31536000; includeSubDomains" Location http:// https:// } log { output file /var/log/caddy/access_https.log } encode zstd gzip } (default_proxy) { import default_https_header reverse_proxy {args.0} { header_up X-Real-IP {remote_host} header_down -Strict-Transport-Security } }
sam.hided.net 쪽 caddy
sam.hided.net { import default_proxy localhost:80808800 @mirror_mode { remote_ip #CIDR } reverse_proxy @mirror_mode localhost:80808800{ header_up host sam-mirror.hided.net header_down -Strict-Transport-Security trusted_proxies #TODO:cidr 입력! } }
sam-mirror.hided.net쪽 caddy
sam-mirror.hided.net { import default_https_header reverse_proxy https://sam.hided.net { header_up host sam.hided.net header_up X-Real-IP {remote_host} header_down -Strict-Transport-Security header_up -alt-svc header_down -alt-svc header_down -server header_up -upgrade-insecure-requests transport http { tls tls_renegotiation once versions 2 1.1 } } }
해결해야 했던 사안:
(1) 두개의 URL sam.hided.net 이 원래 서버, sam-mirror.hided.net 이 미러일 때, 제대로 host와 remote_addr이 지정되도록 해야함.
(2) 두 서버 모두 caddy를 사용해야함!
(3) http/3를 써보고 싶었기 때문에 tcp stream proxy는 배제함. (기존 nginx에서는 tcp stream proxy 사용)
핵심 해결책:
(1) sam-mirror - sam 통신에서 header의 host 조작을 왔다갔다 해야함
(2) reverse_proxy에서 trusted_proxies를 지정해야 HTTP_X_FORWARDED_FOR가 제대로 전달됨
수정 2022-09-21: Caddy 2.6에서는 HTTP/3를 기본 지원하므로 기존 config 수정
댓글 달기