Nginx QUIC을 이용한 HTTP3 적용했습니다.
컨텐츠 정보
- 12,914 조회
- 10 댓글
- 1 추천
- 목록
본문
2020년 11월에 클라우드플레어의 quiche를 적용한 도커 이미지로 쉽게 http3를 올렸었습니다. (링크 : https://www.wsgvet.com/notice/66 )
다만 자잘한 버그와 버벅거림 때문에 Nginx 순정 도커 이미지만 쓰다가 다시 도전해서 이미지를 완성했습니다.
Nginx에서 직접 개발 중인 QUIC 프로토콜은 아직 개발 중이며, https://hg.nginx.org/nginx-quic/shortlog/quic 링크에서 직접 확인할 수 있습니다.
아직 정식버전은 아니라서 개발용으로만 쓰는 것을 추천한다고 합니다.
저는 최신 기술을 경험하는 것을 좋아해서 직접 적용해보았습니다.
제가 만든 이미지는 https://hub.docker.com/r/woosungchoi/docker-nginx-brotli 여기에 있습니다.
물론 도커 파일을 제가 직접 만든건 아니고, https://github.com/RanadeepPolavarapu/docker-nginx-http3 이 소스에서 몇가지 변형을 주고 Nginx QUIC을 직접 넣어줬습니다.
boringSSL 적용 방식도 조금 달라서 구글링해서 맞춰 넣었습니다.
오라클 클라우드 ARM 인스턴스에서 직접 빌드해서 ARM64 버전도 올려두었습니다.
AMD64 버전은 하루에 한번씩 최신 버전에 맞게 빌드되어 이미지로 올라갈 것입니다. ARM64버전은 아직 자동화하는 방법을 찾고 있어서, 수동으로 빌드해서 올리고 있습니다.
지금은 모든 버전이 최신버전입니다. ㅎㅎ
공식 적용방법은 https://quic.nginx.org/README 여기를 참조하시면 되구요.
2가지 부분을 애먹었습니다.
첫번째로 위 스샷에 있는 0-RTT가 나오지 않았었습니다. 모든 조건을 맞췄는데 안나와서 옵션을 여러가지 끼워맞추다보니 원인을 찾았습니다.
Nginx SSL 옵션 중에 ssl_session_tickets off; 부분이 있는데, 이걸 해두면 0-RTT가 활성화가 안되더라구요. 앞에 #를 붙여 비활성화 하니 잘 되었습니다.
두번째로 listen 443 http3 reuseport; 옵션을 다른 서브도메인에도 넣어줬는데, 계속 중복되었다고 나오더라구요.
그래서 찾아보니 reuseport는 하나의 서버에서 딱 하나의 도메인(서버블록)에만 적용이 가능하더라구요.
그래서 저는 현재 이 홈페이지에 적용했고, 나머지 테스트 사이트에는 빼줬습니다. 그럼에도 불구하고, 다른 사이트도 모두 http3 접속이 잘 되더군요. ㅎㅎ
또한 아쉬운 부분이 2가지가 있습니다.
첫번째는 예전부터 적용해왔던 하이브리드 SSL 인증서 적용이 안되는 것이었습니다. (링크 : https://www.wsgvet.com/home/492 )
RSA와 ECDSA 인증서를 받아서 둘다 적용 후 각 클라이언트 환경에 맞게 선택해서 받을 수 있었는데, 지금은 RSA만 쓰였습니다.
그래서 RSA는 과감하게 #로 주석처리해주고 ECDSA만 쓰고 있습니다.
두번째는 OCSP Stapling이 안되는 것입니다. 현재 openSSL의 문제(?)로 http3 적용이 안되고 있는데요.
그래서 boringSSL을 쓰거나 openSSL을 포크한 https://github.com/quictls/openssl 를 써야하는데요.
우선 boringSSL은 공식적으로 OCSP 지원을 중단한 것으로 보입니다. 개인이 만든 패치는 있는 것 같구요.
quictls를 쓰면 아마도 OCSP 지원이 될 것 같은데요. 적용 방법을 몰라서 이 부분은 공부해야 적용 가능할 것으로 보입니다.
결론적으로 2가지가 아쉽지만 꼭 필요한 기능은 아니라서 당분간은 현재 셋팅으로 HTTP3를 즐기려고 합니다.
-
등록일 2024.08.20
-
등록일 2024.07.25
-
등록일 2022.06.17
-
등록일 2022.06.01홈페이지 업데이트 완료했습니다.댓글 2
관련자료
-
서명우성짱의 NAS를 운영하고 있습니다.
저의 즐거움이 여러분의 즐거움이면 좋겠습니다.
-
링크