http/1.1 vs http/2 ssl?
Nginx는 http/2 ssl은 가능하지만, ssl 없이 http/2가 설정되지 않습니다.
nginx는 비 암호화 통신에 대해서는 http/1.1이 최대 한계입니다.
그래서 이런게 궁금해졌습니다.
reverse proxy 환경에서 http/1.1 비보안
과 http/2 SSL
중 무엇이 더 빠를까?
http/2의 성능 향상은 얼마나 될까?
HTTP/2의 특징으로는 이런것이 있습니다.
헤더 압축, binary 파일로 전달하여 통신 횟수 감소 등이 있습니다.
즉 네트워크 전송량 감소로 성능 향상이 존재하는 것이죠.
이것으로 최대 30% 정도의 성능 향상이 존재한다고 합니다.
그런데 말입니다..? 압축? 압축은 아무런 과정 없이 이루어질것인가?
프론트엔드와 백엔드가 같은 머신에서 docker network로 통신하는 환경인데, 통신 횟수 감소로 인한 성능 향상은 얼마나 클까?
백엔드에 http/2를 하려면 강제로 ssl 암호화 통신을 해야하는데(nginx의 한계. http의 제한 사항이 아니다) 그러면 암호화 및 복호화는 또 얼마나 걸릴까?
이런 고민으로 고민하기 시작했습니다.
Nope! http/1.1 vs http/1.1 ssl !
하지만 찾아보니까 nginx는 http2로 접속해오는 클라이언트는 받을 수 있지만
http2로 접속하지는 못합니다.
역프록시 환경에서는 nginx가 client가 되고, wordpress나 다른 애플리케이션이 server가 되죠.
그런데.. nginx는 놀랍게 클라이언트로써는 http/2가 불가능하다고 합니다.
저도 이런 내용의 글을 보고 nginx 로그를 봤습니다.
모든 access로그는 1.1이더군요..
저의 고민이 완전히 바뀌었죠.
백엔드
와 프론트엔드
사이의 http버전은 동일하고
ssl이 있는 것(http/1.1 ssl)과 없는 것(http/1.1) 중 무엇이 빠른가?로 질문이 변경된것입니다.
이건 너무 당연한 질문이죠?
예전에 litespeed에서도 비슷한 경험이 있었습니다.
litespeed도 http3를 수신할 수는 있지만, http3로 접속은 못했었습니다.
백엔드에 http2 이하는 접속 못하게 하니 접속이 안되었죠.
(litespeed는 그래도 http2로 접속은 되었었고, 지금은 http3 접속도 가능할지도 모르겠습니다.)
그래도 알아보자! http/2 vs http/1.1
https://youtu.be/a-sBfyiXysI
저는 이 곳에서 영상을 보고 좀 알게 된 것들이 있습니다.
http/1.1만 되어도 tls 핸드쉐이크가 크게 줄어들고, keepalive 재사용으로 성능이 많이 증가한다고 합니다.
여기에서 http/2가 되면 binary로 데이터를 주고 받게 되면서 성능이 비약적으로 증가하게 되는데, wordpress(백엔드)와 nginx proxy(프론트엔드)가 하나의 머신에서 작동하는 제 환경에서는 네트워크에 의한 성능 향상은 별로 없다고 볼수 있습니다.
반면 keeplive 재사용이나 응답을 받기 전에 다음 요청을 전달하는 Pipelining 등 로컬 환경에서도 성능에 영향 줄 만한 기능들은 대다수가 만족되고 있습니다.
만약 nginx가 http/2 클라이언트가 된다고 하더라도
http/2 ssl보다는 http/1.1 비보안이 훨씬 유리한 환경인 것이죠.
(http/2 비보안이 된다면 좋지 않았을까요?ㅎㅎㅎㅎ)
그래서 wordpress를 http로 변경했습니다.
이건 엄청 힘든 작업이더군요..
front-end에서 backend(wordpress)로는 http연결을 하다보니
이 워드프레스놈이 http를 https로 리디렉션을 요청합니다.
이미 https인데 말이죠.
워드프레스가 현재 http인지 https인지를 인지하지 못하는 것이죠.
too many redirection 오류가 나거나, https 페이지에서 http를 띄울 때 발생하는 "no-referer-when-downgrade"에러를 볼수 있습니다.
이는 wordpress가 http를 인식하는 방식이 뒤떨어져서 그런데, 플러그인이 있더군요.
SSL Insecure Content Fixer
플러그인을 설치하면 아래에 https detection 방식을 설정할 수 있는데, 이거 설정하면 무한 redirection이나 no-referer-when-downgrade
문제가 해결됩니다.
답글 남기기