별건 아니지만 나름 의미가 있을테니 설정을 남겨둡니다.
공용 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 수정
댓글 달기