2016-08-02 2 views
2

지금까지 모든 튜토리얼에서 내 서버에서 HTTP/2 지원을 사용하도록 설정해야한다고 설명했습니다.리버스 프록시 뒤의 HTTP/2

주어진 시나리오에서 우리는 백엔드 Tomcat/Jetty 서버 앞에 nginx가 있으며, 성능면에서는 백엔드에서 HTTP/2를 사용할 가치가 있지만 HTTPS가 있어야한다는 요구 사항이 있습니다. 과잉 살상이다.

HTTPS는 보안 차원에서 필요하지 않으며 (nginx 만 노출됨) 운영상의 관점에서 보면 약간 번거롭기 때문에 백엔드 서버를 실행하는 각 Docker 컨테이너에 인증서를 추가해야합니다.

HTTP/2 지원 (또는 비슷한 성능)을 제공하는 방법이 없으며 설정하는 데 덜 관련되어 있습니까?

+0

> 지금까지 모든 튜토리얼에서 내 서버의 SSL이 HTTP/2를 지원하도록 설정해야한다고 말했습니다. 아마도 그 이유는 브라우저가 ssl을 통해 http/2 만 지원한다는 것입니다 : http://caniuse.com/#feat=http2 (# 2 쪽 참고) –

답변

3

당신은 HTTP/2를 완전히 말할 필요가 없습니다.

HTTP/2는 주로 클라이언트 -> Nginx 연결에 영향을주는 대기 시간 문제를 해결합니다. 서버 간 연결 (예 : Nginx에서 Tomcat/Jetty)은 대기 시간이 짧아서 HTTP/2에서 얻을 수있는 영향이 적습니다.

Nginx에서 HTTPS 및 HTTP/2를 사용하도록 설정 한 다음 Tomcat/Jetty와 계속해서 HTTP/1.1을 이야기해야합니다.

모든 것이 (예 : Nginx proxy_pass 지시문과 Tomcat/Jetty) 모든 것을 통해 HTTP/2를 지원하는지 여부는 문제가됩니다. 네트워크 가장자리에서 HTTP/2 만 사용하는 경우 문제가되지 않습니다.

5

우리가 권장하는 전형적인 설정은 HAProxy을 Jetty 앞에두고 TAP와 Jetty가 일반 텍스트 HTTP/2를 사용하도록 HAProxy를 구성하는 것입니다.

이 설정을 사용하면 효율적인 TLS 오프 로딩 (OpenSSL을 통한 HAProxy에서 수행)의 이점을 얻을 수 있으며 완전한 엔드 투 엔드 HTTP/2 통신의 이점을 얻을 수 있습니다.

특히, 후자는 HTTP/2를 통해 컨텐츠를 밀어 넣을 수 있습니다. 백엔드 통신이 HTTP/1.1 인 경우에는 불가능합니다.

리소스 사용량이 적고 변환 단계가 적어 (HTTP/2에서 HTTP/1.1 및 viceversa로 변환 할 필요가 없음) 스트림을 응용 프로그램의 모든 곳으로 재설정하는 등의 HTTP/2 기능을 완벽하게 사용할 수있는 기능 . HTTP/1.1 로의 변환이 체인에있는 경우 이러한 이점 중 어느 것도 작동하지 않습니다.

Nginx가 Jetty의 역방향 프록시로만 사용되는 경우 아무런 이점도 없으며 실제로 시스템 속도가 느려지고 HTTP/1.1로 요청을 변환하고 HTTP/2로 다시 응답해야합니다.

HAProxy는 변환을하지 않기 때문에보다 효율적이며 HTTP/1.1과 관련하여 모든 이점을 제공하는 완전한 HTTP/2 스택을 허용합니다.

+0

TLS 오프로드에 nginx를 사용할 수 있습니까? – sfThomas

+0

흥미 롭습니다! 그러나 HAProxy가 SSL을 종료하면 아마도 Jetty에 새로운 HTTP/2 연결이 설정됩니다. 두 가지 다른 HTTP/2 연결에서 모든 기능 (예 : 푸시, 스트림 재설정 등)을 사용할 수 있습니까? 그렇다면 당신은 아주 좋은 것 같습니다! –

+0

@BazzaDP, 가능합니다.이것은 https://webtide.com 및 https://cometd.org를 제공하기 위해 사용하는 설정입니다. HAProxy는 해독 된 바이트를 백엔드로 전달하기 만하면 HTTP/2 바이트라는 것을 알지 못합니다. 백엔드의 Jetty는 일반 텍스트 HTTP/2를 제공하고 Jetty의 고급 HTTP/2 푸시 기능을 활용합니다. 나는 HAProxy 및 Jetty 구성 [here] (https://webtide.com/http2-with-haproxy-and-jetty/)에 대해 자세히 설명했습니다. – sbordet

관련 문제