캐디를 사용한 안전한 HTTP/3 실험
블리딩 에지 문제
저는 QUIC documentation을 쓰고 있는데 사이트를 HTTP/3(QUIC 위에서 실행됨)로 사용할 수 있으면 좋겠다고 생각했습니다. 이것은 비교적 새로운 프로토콜이므로 몇 가지 친숙한 문제에 부딪혔습니다.
도구: 내가 사용하고 있는 웹 서버(apache)는 HTTP/3 지원을 제공하지 않으며 현재 계획이 없습니다
가동 시간: 문제의 페이지는 비교적 인기가 있으며 이것을 설정하는 동안 다운되는 위험을 감수하고 싶지 않습니다
QUIC의 가능성
운 좋게도 QUIC 전송 프로토콜의 세부 사항은 여기에서 우리에게 약간의 유연성을 제공합니다.
해결책
수정은 간단한 Caddy 리버스 프록시입니다. "바인딩 분할"을 허용하기 위해 도커 컨테이너에서 실행 중입니다. Caddy는 TCP 및 UDP 포트를 모두 바인딩하려고 하지만 UDP 포트만 제공할 수 있습니다. 컨테이너화는 컨테이너에서 둘 다 바인딩할 수 있는 유연성을 제공하지만 UDP 포트만 세상에 노출합니다.
세부
캐디 설치는 다음과 같습니다. "youruser
"또는 "yoursite
"자리 표시자로 표시된 몇 줄을 수정해야 합니다.
설정:
### change as appropriate for your OS
sudo snap install docker
mkdir ~/caddy/
mkdir ~/caddy/caddy_data
mkdir ~/caddy/caddy_config
~/caddy/docker-compose.yaml
:
version: "3.7"
services:
caddy:
container_name: caddy
hostname: caddy
image: caddy:2.4.6
restart: unless-stopped
ports:
- "443:443/udp"
volumes:
- /home/youruser/caddy/Caddyfile:/etc/caddy/Caddyfile
- /path/to/yoursite/fullchain.pem:/caddy.crt
- /path/to/yoursite/privkey.pem:/caddy.key
- /home/youruser/caddy/caddy_data:/data
- /home/youruser/caddy/caddy_config:/config
extra_hosts:
- "host-gateway:172.17.0.1"
volumes:
caddy_data:
external: true
caddy_config:
~/caddy/Caddyfile
:
{
auto_https off
servers {
protocol {
experimental_http3
}
}
}
yoursite.com {
tls /caddy.crt /caddy.key
reverse_proxy * https://host-gateway {
transport http {
tls_insecure_skip_verify
}
}
}
시작:
cd ~/caddy
sudo docker-compose up -d
### tail the logs with `sudo docker logs -f caddy`
광고 HTTP/3
위는 UDP 포트 443에서 HTTP/3을 제공하는 리버스 프록시를 설정하지만 "실제"HTTP 서버에 광고할 때까지 아무것도 시도하지 않습니다. 다행스럽게도 이 사소한 구성이 프로덕션 서버에 필요한 유일한 변경 사항이었습니다.
사이트에 대한 내VirtualHost
Apache 구성에서:
Header set alt-svc "h3=\":443\"; ma=3600, h3-29=\":443\"; ma=3600
이는 "Alt-Svc:"헤더가 있는 HTTP/3 서비스(프로토콜의 "표준"및 "드래프트 29"버전 모두)를 알립니다. 이것이 적용되려면 아파치를 바운스해야 합니다.
인증서 순환
인증서 회전을 처리하려면 마지막으로 한 가지가 필요합니다. 위의 솔루션은 사이트 인증서와 키를 Caddy 컨테이너에 복사하지만 LetsEncrypt를 사용하는 경우 해당 인증서는 3개월 동안만 유효하며 매월 순환될 가능성이 높습니다. 컨테이너가 항상 상대적으로 최신 인증서를 캡처하는지 확인하기 위해 cron에서 다음을 실행합니다.
### bounce the reverse proxy every month
39 0 25 * * cd /home/youruser/caddy && /path/to/docker-compose down && /path/to/docker-compose up -d
Stephen Cleary CC 2.0의 표지 이미지
Reference
이 문제에 관하여(캐디를 사용한 안전한 HTTP/3 실험), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/syncsynchalt/safe-http3-experimentation-with-caddy-447f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
### change as appropriate for your OS
sudo snap install docker
mkdir ~/caddy/
mkdir ~/caddy/caddy_data
mkdir ~/caddy/caddy_config
version: "3.7"
services:
caddy:
container_name: caddy
hostname: caddy
image: caddy:2.4.6
restart: unless-stopped
ports:
- "443:443/udp"
volumes:
- /home/youruser/caddy/Caddyfile:/etc/caddy/Caddyfile
- /path/to/yoursite/fullchain.pem:/caddy.crt
- /path/to/yoursite/privkey.pem:/caddy.key
- /home/youruser/caddy/caddy_data:/data
- /home/youruser/caddy/caddy_config:/config
extra_hosts:
- "host-gateway:172.17.0.1"
volumes:
caddy_data:
external: true
caddy_config:
{
auto_https off
servers {
protocol {
experimental_http3
}
}
}
yoursite.com {
tls /caddy.crt /caddy.key
reverse_proxy * https://host-gateway {
transport http {
tls_insecure_skip_verify
}
}
}
cd ~/caddy
sudo docker-compose up -d
### tail the logs with `sudo docker logs -f caddy`
Header set alt-svc "h3=\":443\"; ma=3600, h3-29=\":443\"; ma=3600
### bounce the reverse proxy every month
39 0 25 * * cd /home/youruser/caddy && /path/to/docker-compose down && /path/to/docker-compose up -d
Reference
이 문제에 관하여(캐디를 사용한 안전한 HTTP/3 실험), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/syncsynchalt/safe-http3-experimentation-with-caddy-447f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)