카테고리:

3 분 소요

HTTP/2

HTTP/2는 HTTP/1.1과는 달리, TCP 연결 하나로 여러 파일들(.js, .css, .jpg, .png 등)을 병렬 전송하여 서버단에서는 소켓의 낭비를 줄이고 클라이언트 단에서는 SPDY의 최대 병렬 다운로드 개수인 6개를 넘어서 더 빠르게 로딩이 가능해진다.

Nginx에서는 1.9.5 버전부터 HTTP/2를 지원하게 되었다.

https://www.nginx.com/blog/nginx-1-9-5/

1. Nginx 업데이트(< 1.9.5인 경우)

Nginx는 아래의 명령어를 사용하여 다운로드 받거나 업데이트할 수 있다.

# 새로 다운로드 받는 경우
apt-get install nginx

# nginx 버전이 낮아 nginx만 업데이트 하려는 경우( < 1.9.5)
nginx -v
apt-get install --only-upgrade nginx

2. Nginx에 TLS 적용하기(Https가 적용되어 있지 않은 경우)

그리고 Nginx에서 HTTP/2를 사용하기 위해서는 브라우저들이 TLS의 적용 없이는 HTTP/2 연결을 허용하지 않고 HTTP/1.1로 연결 시킨다.

Firefox will only be implementing HTTP/2 over TLS - and so far that means for https:// schemed URLs (see below for http:// with TLS support).

It does enforce the protocol’s >= TLS 1.2 requirement - if a server negotiates HTTP/2 with a lower TLS version it is treated as a protocol error. (there is a preference for changing that for testing purposes if you need it.)

https://wiki.mozilla.org/Networking/Archive/http2

따라서 TLS를 적용하기 위해서는 인증서를 발급받아서 서버에 적용하여야 한다.

https://syudal.github.io/post/Ubuntu-Nginx-Lets-Encrypt로-https-적용하기/

3. HTTP/2 설정하기

서버에 인증서가 적용된 경우 아래와 같이 설정이 되어 있는데, 간단히 ssl뒤에 http2만 추가하면 된다.

일반적으로 etc/nginx/sites-available/에 존재한다.

server {
    listen 443 ssl http2 default_server;
 
    ssl_certificate     server.crt;
    ssl_certificate_key server.key;
    ...
}

이후, 아래와 같은 명령어로 nginx를 재시작하고 해당 사이트에 접속하면 h2 protocol로 잘 접속되는 것을 볼 수 있다.

service nginx restart

chrome 개발자 도구로 해당 사이트가 h2로 제대로 제공하고 있음을 확인한 모습

태그: h2, http/2, http2, https, nginx, spdy, SSL, TLS, ubuntu

업데이트: