먼저 기본적으로 HTTP3(QUIC)가 활성화되어 있지 않아서 만약 haproxy가 설치되어 있다면 재설치하셔야 하니다.
먼저 openssl는 QUIC를 지원하지 않아 fork된 quictls를 설치해야 합니다.
$ sudo apt update
$ sudo apt install -y \
ca-certificates \
gcc \
git \
libc6-dev \
liblua5.3-dev \
libpcre3-dev \
libssl-dev \
libsystemd-dev \
make \
zlib1g-dev
$ cd ~
$ git clone https://github.com/quictls/openssl
$ cd openssl
$ git checkout OpenSSL_1_1_1t+quic
$ sudo mkdir -p /opt/quictls
$ ./Configure --libdir=lib --prefix=/opt/quictls
$ make
$ sudo make install
설치가 완료되면 haproxy를 설치합니다.
$ cd ~
$ git clone https://github.com/haproxy/haproxy.git
$ cd haproxy
$ git checkout v2.9.0
$ make TARGET=linux-glibc \
USE_LUA=1 \
USE_PCRE=1 \
USE_ZLIB=1 \
USE_SYSTEMD=1 \
USE_PROMEX=1 \
USE_QUIC=1 \
USE_OPENSSL=1 \
SSL_INC=/opt/quictls/include \
SSL_LIB=/opt/quictls/lib \
LDFLAGS="-Wl,-rpath,/opt/quictls/lib"
$ sudo make install-bin
$ cd admin/systemd
$ sudo make haproxy.service
$ sudo cp ./haproxy.service /etc/systemd/system/
$ sudo mkdir -p /etc/haproxy
$ sudo mkdir -p /run/haproxy
$ sudo touch /etc/haproxy/haproxy.cfg
$ sudo systemctl enable haproxy
$ sudo systemctl start haproxy
아래는 config 예시입니다.
http3는 http2로 먼저 접속 후 alt-svc 헤더를 통해 http3를 연결하게 됩니다.
frontend fe
mode http
bind :80
bind :443 ssl crt /etc/haproxy/certs/foo.com/cert.crt alpn h2
bind quic4@:443 ssl crt /mycert.pem alpn h3
http-request redirect scheme https unless { ssl_fc }
http-after-response add-header alt-svc 'h3=":443"; ma=60'