haproxy에서 http3(QUIC) 사용하기

먼저 기본적으로 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'

Leave a Comment