Choi의 고유결계

[Nginx][Spring] net::err_http2_protocol_error 오류 해결 본문

인프라/NGINX

[Nginx][Spring] net::err_http2_protocol_error 오류 해결

믿을수없는맛 2024. 2. 20. 14:04
반응형

상황

 

회사에 인트라넷 웹서비스가 있는데 간혈적으로 net::err_http2_protocol_error 오류가 발생 했다. 

원래도 잘되는 페이지였기 때문에 감을 잡을수 없었다..

 

처음에는 응답 데이터량이 많아서 발생하는 http2 오류 인줄 알았지만 그것도 아니였다.

로컬 혹은 개발 서버에서  구동 시 전혀 문제가 없었는데, 운영 서버에서만 유독 그랬다...

 

운영 서비스 앞단에는 Nginx가 프록시 서버로 동작하고있는데 이것을 힌트 삼아 열심히 구글링!

아래 내용을 찾을 수 있었다..!

 

원인

대충 응답에 content-length 헤더가 없으면 해당 에러가 발생할 수 있다는 내용으로 이해..?

https://github.com/FireBurn/haproxy/commit/bbe4f7c0042ebfa9e24060111fef2e570751765f

 

확인해보니 오류가 안나는 로컬/개발 서버에서의 정상 응답과 운영의 비정상 응답을 확인해보니

content-length유무의 차이가 있었다. ㅠ

 

해결

운영과 개발 Nginx가 따로 있고 설정도 조금씩 다른데,, 아마 여기서 문제가 발생하거나 버전이 달라서 그런것 같다.

운영 프록시 서버 설정을 바꾸기에는 부담이 커서 인트라넷 서비스에 아래 필터를 추가하여 해결하였다.

@Component
public class ContentLengthFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,     FilterChain chain) throws ServletException, IOException {

		ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response);

		chain.doFilter(request, responseWrapper);

		responseWrapper.copyBodyToResponse();

	}

	@Override
	public void destroy() {
	}

}

 

 

 

 

반응형
Comments