ELB 에서 ALB 로 변경하면서 HTTP2 를 적용하는 중 이유를 알기 어려운 문제가 발생하여 기록하낟.
문제가 발생한 설정 내용:
ALB HTTP2 활성화 켬
대상그룹 프로토콜 버전 HTTP2 로 설정
NGINX listen http2 설정
증상:
대부분 잘되지만 일부 PC 에서 HTTP STATUS 464 오류가 발생함
일부 피씨에서만 발생하니 문제원인을 알기가 굉장히 까다로웠다.
해결을 위한 문제파악:
우선 ALB 엑세스 로그를 활성화한 후 로그를 확인해보았다.
액세스 로그를 확인해보니 대부분의 요청은 h2 HTTP/2.0 으로 호출이 되었으나,
464 오류가 발생한 요청은 https HTTP/1.1 로 요청을 하고 있었다.
AWS Forum 을 뒤져보다가 아래와 같은 글을 발견하였고 아래와 같은 답변 내용을 확인하였다.
"이것이 작동하도록 하기 위해 대상 그룹의 프로토콜을 http2에서 http1 및 http2로 변경했습니다. 그런 다음 작동했습니다."
https://forums.aws.amazon.com/thread.jspa?threadID=332847
의문:
1. HTTP/1.1 로 요청하더라도 HTTP2.0 은 HTTP 1.1 을 호환하기 때문에 돼야하는데 왜 안될까?
> 대상그룹에서 프로토콜 버전을 HTTP2 로 강제 했기 때문에 오직 HTTP2 요청만 수용하는것일까?
2. 일부 피씨에서만 안되는 이유는 무엇일까?
> 해당 피씨 브라우저 설정을 따로 건드린건 아닐까? 혹시 프록시를 경유하고 있는가?
문제해결한 설정 내용:
ALB HTTP2 활성화 켬
대상그룹 프로토콜 버전 HTTP1 로 설정
HTTP1 설정하는 부분 설명에 아래와 같은 내용이 기재돼있다.
(HTTP/1.1을 사용하여 대상에 요청을 보냅니다. 요청 프로토콜이 HTTP/1.1 또는 HTTP/2인 경우 지원됩니다.)
NGINX listen http2 제거
결과:
위와 같이 설정하니 대부분의 피씨에서 h2 로 요청하였으며 HTTP STATUS 464 오류가 발생하던 피씨에서는 HTTP/1.1 로 요청하여 정상적인 응답을 받았다.
문제 해결을 하긴 하였지만, 뭔가.. 클리어하지는 않다.