Docker로 HTTP/2 자신의 사이트에 쉽게 대응하세요

HTTP/2도 대체로 규격을 갖추었다.
대표적인 WEB 브라우저인 Firefox, Google Chrome에서는 HTTP 2를 사용할 수 있습니다.
HTTP/2가 대략적으로 말하면 데이터 전송 주위의 다양한 효율이 좋아져서 기쁘다.
열심히 가져오기는 어렵지만 일반 사이트에 Docker가 있다면 HTTP/2에 대한 테스트를 할 수 있다.

컨디션


일반적인 웹 환경의 모델로 아마존 EC2에서 HTTP(TCP/80) 호스트인Word Press만 사용하는 AMIMOTO씨를 사용해 봤습니다.
WordPress AMI 메타
AMI에서 EC2 인스턴스를 시작하면 WordPress가 명문 HTTP에서 이동합니다.
※ 시동 시에도 안전팀 내에서 HTTPS(TCP/443)를 승인하십시오.
Docker로 시작하는 과정은 HTTP2로 upstream(reverse proxy)의 무언가를 받아들일 수 있습니다.

Docker 준비


Amazon Linux이기 때문에 Docker 호스트는 포장으로 바로 시작할 수 있습니다.
      ___         _            __
     / _ | __ _  (_)_ _  ___  / /____
    / __ |/  ' \/ /  ' \/ _ \/ __/ _ \
   /_/ |_/_/_/_/_/_/_/_/\___/\__/\___/


Amazon Linux AMI release 2014.09
    Nginx 1.6 + PHP 5.5 + Percona 5.6

  amimoto     http://ja.amimoto-ami.com/
  digitalcube https://www.digitalcube.jp/

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$
yum로 하면 돼요. 먼저 시동 걸어요.
$ sudo yum install docker -y
$ sudo service docker start

샘플 가져오기 Docker 파일


Giithub에서 모방용 Docterfile이 있습니다. #=>higanworks/http2_by_docker
우리 적당히 복제합시다.
$ mkdir github.com && cd $_
$ git clone https://github.com/higanworks/http2_by_docker.git

WordPress 측의 훈련


이 방법은 역방향 에이전트이기 때문에WordPress에 도달하는 요구는 HTTP입니다.
무엇보다 HTTPS를 구성으로 지정하면 됩니다./var/www/vhosts/i-xxxx/wp-config.php
$_SERVER['HTTPS'] = 'on';
참고: 이 설정에 가입하면 스타일 등의 부품이 모두 HTTPS 링크에 포함됩니다.
열심히 사용하고 있다면 아래 어딘가에서 조금만 더 조정하면 된다.
  • wp-config.php로 조건 쓰기 HTTPS 헤더
  • nginx로 조건x-forwarded-***
  • 부여

    h2o HTTP/2 사용


    그럼 h2o부터 써요.
    h2o/h2o
    h2o의 Docker file는 거의 빌렸다tcnksm/dockerfiles.
    Docterfile을 확인한 후 이미지를 구성합니다.
    $ cd h2o
    $ sudo docker build -t local/h2o .
    
    ...
    
    Successfully built 21fee39e3a54
    
    엔딩은 이런 느낌.proxy.reverse.url는 Docker가 가상 네트워크를 사용하는 것을 말합니다.
    conf/h2o.conf
    listen:
      port: 8080
      ssl:
        certificate-file: examples/h2o/server.crt
        key-file: examples/h2o/server.key
    hosts:
       default:
        paths:
          /:
            proxy.reverse.url: http://172.17.42.1:80/
        access-log: /dev/stdout
    
    그럼 Docker로 h2o 프로세스를 향상시킵시다.대체로 다음과 같이 지정한다.
  • 포워딩 포트
  • 구성 디렉토리 마운트
  • 매개변수를 사용하여 마운트된 구성 파일을 전송합니다.
  • $ sudo docker run -t --rm -p 443:8080 -v `pwd`/conf:/conf local/h2o /conf/h2o.conf
    
    이렇게 하면 TLS(TCP/443)를 통해 WEB 브라우저로부터 요청을 받아 h2o의 8080에서 재생한 다음nginx에 건네준다.
    빨리 브라우저에서 https://${ec2_public_ip} 열어라.

    개발 도구를 보면 서버는 h2o로 HTTP2를 사용하고 있음을 알 수 있습니다.

    h2o는 고객의 대응 상황에 따라 HTTP2가 아니라 HTTP1이다.x를 자동으로 전환할 수 있기 때문에 대부분의 브라우저와 클라이언트는 웹 페이지를 정상적으로 표시할 수 있다.

    Trusterd를 사용한 HTTP/2


    나는 다음에 같은 일을 해 보겠다Trusterd.
    이것도 이미지의 구축에서 시작된 것이다.
    $ cd ../trusterd
    $ sudo docker build -t local/trusterd .
    
    ...
    
    
    Trusterd 설정 파일은 이런 느낌입니다.Ruby!
    conf/trusterd.conf
    SERVER_NAME = "Trusterd"
    SERVER_VERSION = "0.0.1"
    SERVER_DESCRIPTION = "#{SERVER_NAME}/#{SERVER_VERSION}"
    
    root_dir = "/usr/local/trusterd"
    
    s = HTTP2::Server.new({
      :port           => 8080,
      :document_root  => "#{root_dir}/htdocs",
      :server_name    => SERVER_DESCRIPTION,
    
      :worker         => "auto",
      :server_host  => "0.0.0.0",
    
      :debug  =>  true,
      :key    => "/usr/local/src/trusterd/docker/conf/server.key",
      :crt    => "/usr/local/src/trusterd/docker/conf/server.crt",
      :tls => true,
    
      :callback => true,
    
      :run_user => "nobody",
    
      :server_status => true,
      :upstream => true,
    
    })
    
    s.set_map_to_storage_cb {
      s.upstream_uri = s.percent_encode_uri
      s.upstream_host = "172.17.42.1"
      s.upstream_port = 80
    }
    
    s.run
    
    Docker에서 Trusterd 프로세스를 시작할 때는 이렇습니다.h2o와 기본적으로 같은 방법.
    $ sudo docker run -t --rm -p 443:8080 -v `pwd`/conf:/conf local/trusterd /conf/trusterd.conf
    
    이쪽도 브라우저로 개발 도구에서 확인하고 있다HTTP/2.0.

    트러스터드via는 머리 등을 사용해 대리적인 행동을 볼 수 있다.중요한 장소의 호출 코너에 머리를 비롯한 다양한 통신 콘텐츠가 개입되는 것도 흥미롭다.
    다만 이 기사가 공개됐을 때의 버전인 Trusterd는 HTTP/2를 지원하지 않는 WEB 브라우저 클라이언트에게는 무자비하다.bad connection 연결을 끊습니다.
    xxx.xxx.xxx.xxx connected
    session_recv: datalen = 611
    Fatal error: Received bad connection preface114.172.124.198 disconnected
    
    주로 차단된 건 사파리(<=해당)와 IE...?그렇게 생각하면 괜찮을 수도 있어.

    h2o와trusterd


    사용하는 두 HTTP/2 서버를 대략적으로 비교합니다.
    -
    h2o
    trusterd
    HTTP 프로토콜
    1.0/1.1/2.0
    2.0
    프로파일
    yaml(WITH MRUBY)
    mRuby
    대리적 행위
    별거 없어요.
    프록시 헤더 추가(임의로 추가할 수 있음)
    안정성
    기본적 안정
    읊다, 읊조리다
    전투력
    실제 성적도 있는 것 같은데,
    지금부터사용자 피드백은 어떻습니까?
    확장성
    C를 쓸 수 있다면 확장할 수 있습니다.trusterd 저자h2o_mruby 추가에 따르면 기본적인 유형의 실현도 추진되고 있다.
    Full muRuby는 상당히 하고 싶어한다.C가 읽고 쓸 수 있었으면 더 좋았을 텐데.
    로고
    없다
    멋지다
    한마디로 h2o에서(간단하게) 팟캐스트와 호응 동작에 집중하고 싶다면 Trusted를 사용한다.당신의 사이트도 HTTP/2에 대응해 보세요.
    테이블 업데이트
    -2015.8h2o에서 무루비 확장 추가

    좋은 웹페이지 즐겨찾기