AWS EC2로 설정하여 HTTP2의 효과를 실감

3477 단어 http2
mediba advent calendar 2016 14일째 보도다.
서버 사이드push가 나타나고 이미지와 CSS를 다운로드할 때 줄을 서지 않아도 됩니다. 표시 속도가 빨라집니다!
이제야 HTTP2가 실감났고, 어제앤더도 소개해줬어요.는 검증/연구용 AWS 실례에 하나의 동작을 설정했다.
물론 클라우드 프론트가 준비되어 있으니 HTTP2 통신을 조금만 해보세요.
거기가 프런트 엔지니어라고 하지만 스스로 한번 구축해보고 싶어 취미 중심으로 시행했다.

컨디션


서버

  • AWS t2.small
  • OS

  • AmazonLinux
  • M/W

  • nginx/1.10.1
  • OpenSSL 1.0.2j 26 Sep 2016
  • 해본 일


    nginx의 VerUp


    nginx는1.9.5 이후 HTTP2 지원라고 합니다.
    일단 편하게 하세요.sudo yum search nginx그 결과 아마존 창고에는 1.10.1개가 있었다.
    그러나 HTTP2 동작의 경우 OpenSSL 1이 사용됩니다.0.2 이상이 필요합니다.nginx를 연결해서 컴파일해야 합니다.
    Amazon 창고의 OpenSSL은 1.0.1이며,nginx도 이를 사용하여 컴파일합니다.
    그래서 OpenSSL을 VerUP으로 바꾸기로 결정했습니다.

    OpenSSL의 VerUp


    yum가 설치할 수 없어서 컴파일했습니다.
    wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
    sudo tar -zxf openssl-1.0.2-latest.tar.gz 
        〜略〜
    $ openssl version
    OpenSSL 1.0.2j  26 Sep 2016
    

    nginx의 VerUp (다시)


    물론 VerUP의 OpenSSL 컴파일을 사용해야 하기 때문에yum는 사용하지 않습니다.
    원본 코드를 다운로드하고 컴파일하며 설치를 덮어썼습니다.
    sudo ./configure --prefix=/usr/share/nginx --with-http_ssl_module --with-http_v2_module --with-stream_ssl_module  --with-openssl=/usr/local/src/openssl-1.0.2j 
    
    컴파일 옵션이 많이 생략되었습니다.

    고쳐 쓰다


    conf에서 SSL을 유효하게 설정합니다. (원래 설정되어 있음)
    HTTP2가 설정되어 있습니다.
    HTTP2는 규격상 http 통신에서도 유효하지만 브라우저 측면에서는 https에서만 유효하기 때문에 SSL 설정이 필요하다.
    server {
        listen       80;
        listen       8080;
        listen       443 ssl http2 default_server;
        server_name  xxxx.mediba.jp;
        #server_name  localhost;
    
        ssl on;
        ssl_certificate /etc/letsencrypt/live/xxxx.mediba.jp/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/xxxx.mediba.jp/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        〜略〜
    }
    

    reload

        $ sudo /etc/init.d/nginx configtest
        $ sudo /etc/init.d/nginx reload
        nginx を再読み込み中:                                      [  OK  ]
    

    동작 확인



    Protocol이 h2(http2)임을 확인했습니다.
    서버 구성은 생각보다 간단합니다.
    nginx의 설정만 있기 때문에 실제로는 많은 것을 고려할 필요가 있다.
    오랫동안 번역을 안 해서 심심해요...

    HTTP2의 위력을 보세요.


    많은 그림이 준비된 페이지를 방문해 보았습니다.

    HTTP1.1로 액세스



    HTTP2를 통해 액세스



    결실


    네트워크와 서버의 부하, 환경이 다르기 때문에 간단한 속도 비교를 할 수 없습니다.
    http2에서 http1.1 에서 발생한 최대 세션 수 때문에 Queing 이 없습니다. (투명)
    그림이 병렬 다운로드된 것을 알 수 있다.
    이번 방문은 최대 500msec의Queing이 발생했습니다. 이게 없으면 0.5초간 간단하게 고속화할 수 있습니다.
    아마 상당한 효과가 있을 거예요!

    좋은 웹페이지 즐겨찾기