Jump to content

Brotli

From DawoumWiki, the free Mathematics self-learning
Brotli Compression Algorithm
Original author(s)Jyrki Alakuijala, Zoltán Szabadka
Developer(s)Jyrki Alakuijala, Eugene Kliuchnikov, Robert Obryk, Zoltán Szabadka, Lode Vandevenne, Mislav Bradač
Initial release15 October 2013; 10 years ago (2013-10-15)
Stable release
1.0.9 / 27 August 2020; 3 years ago (2020-08-27)[1]
Written inC
Operating systemCross-platform
PlatformPortable
TypeData compression
LicenseMIT License

Brotli는 범용 LZ77 무손실 압축 알고리듬, Huffman 코딩과 2차 컨텍스트 모델링의 특정 조합으로 압축된 데이터 스트림에 대해 데이터 형식 사양입니다.[2] Brotli는 구글에 의해 개발된 압축 알고리듬으로 텍스트 압축에 가장 적합합니다. Brotli는 주로 웹 서버콘텐츠 전송 네트워크에 의해 HTTP 콘텐츠를 압축하여 인터넷 웹사이트를 더 빠르게 로드하기 위해 사용됩니다. gzip의 후속 프로그램으로, gzip보다 더 나은 압축을 제공하므로, 모든 주요 웹 브라우저에 의해 지원되고 점점 더 대중화되고 있습니다.

Installation

엔진엑스에서, 컨텐츠를 압축해서 전송함으로써 대기 시간을 줄일 수 있습니다. 데비안에서 기본값으로 gzip을 통해서 압축하지만, 구글에서 새롭게 만든 brotli를 이용하면, 더 대기 시간을 줄일 수 있다고 합니다.

먼저 압축 프로그램을 설치합니다.

  • sudo apt install brotli

아래 과정이 귀찮은 분들은 우분투 PPA의 패키지를 이용할 수 있습니다.

한편, Google PageSpeed for nginx에서 새로운 모듈을 엔진엑스에 추가해서 컴파일 하는 방법을 소개하고 있습니다. 같은 디텍토리 구조에서 소스를 받아서 엔진엑스를 컴파일할 수 있습니다.

즉, 엔진엑스의 소스가 풀려져 있는 상위 디렉토리에서 다음을 수행하십시오.

2개의 파일을 수정합니다.
  • nano debian/changelog
nginx (1.15.9-0ubuntu1.2) cosmic; urgency=medium

  * add-module ngx_brotli

 -- user <user@email.com>  Sun, 17 Mar 2019 11:15:07 +0900

nginx (1.15.9-0ubuntu1.1) cosmic; urgency=medium

  * New upstream release (1.15.9) for cosmic
  * add-module ngx_pagespeed
  • nano debian/rules
			--prefix=/usr/share/nginx \
			--conf-path=/etc/nginx/nginx.conf \
			--add-module=../../../incubator-pagespeed-ngx-1.13.35.2-stable \
			--add-module=../../../ngx_brotli \
			--http-log-path=/var/log/nginx/access.log \
  • dpkg-buildpackge -i -uc -us -b
  • cd ..
  • dpkg -l | grep nginx
해당하는 파일을 한꺼번에 설치해 줍니다.
  • sudo dpkg -i nginx........

이제 엔진엑스의 설정을 수정합니다.

  • sudo nano /etc/nginx/nginx.conf
#   gzip on; 등의 이전 설정은 주석처리하세요.
	brotli on;
	brotli_static on;
#	brotli_comp_level 11;    # this setting can vary from 1-11 기본값은 6입니다.
	brotli_types *;          # MIME 형식은 개별적으로 지정해도 좋습니다.

엔진엑스를 테스트하고 이상이 없으면 재시작합니다.

  • sudo nginx -t
  • sudo systemctl restart nginx

제대로 모듈이 작동하는지 확인을 위해서, 아래 웹-사이트를 방문하고 주소를 입력해 보십시오.

함께, 구글 Insights를 방문해 보십시오.

그렇게 중요하지 않는 자바스크립트와 CSS 파일을 수정하고 나서, 매번 점수는 다르지만, 모바일과 데스크탑 둘 다 90점은 넘는 것으로 보입니다.

Varnish configuration

기존에 gzip으로 판정되고 있는 부분을 일부 수정하여 사용하던 것을 다음 정보에 따라 수정했습니다. 기존 설정에서 조금 차이가 있을 수 있는데, 적절한 자리에 추가하시면 될 듯 합니다.

sub vcl_recv {
    if(req.http.Accept-Encoding ~ "br" && req.url !~
            "\.(jpg|png|gif|gz|mp3|mov|avi|mpg|mp4|swf|wmf)$") {
        set req.http.X-brotli = "true";
    }
}

# The data on which the hashing will take place
sub vcl_hash {
    if(req.http.X-brotli == "true" && req.http.X-brotli-unhash != "true") {
        hash_data("brotli");
    }
}

sub vcl_backend_fetch {
    if(bereq.http.X-brotli == "true") {
        set bereq.http.Accept-Encoding = "br";
        unset bereq.http.X-brotli;
    }
}

sub vcl_purge {
    # repeat purge for brotli or gzip object 
    # (force hash/no hash on "brotli" while doing another purge)
    # set Accept-Encoding: gzip so that we don't get brotli-encoded response upon purge
    if (req.url !~ "\.(jpg|png|gif|gz|mp3|mov|avi|mpg|mp4|swf|wmf)$" && 
            !req.http.X-brotli-unhash) {
        if (req.http.X-brotli == "true") {
            set req.http.X-brotli-unhash = "true";
            set req.http.Accept-Encoding = "gzip";
        } else {
            set req.http.X-brotli-unhash = "false";
            set req.http.Accept-Encoding = "br";
        }        
        return (restart);
    } 
}

Add dynamic module

다른 패키지로부터 수정할 내용을 기록해 둡니다:

  • rules, control 파일에서 brotli를 찾아서 추가합니다.
  • debian/modules/brotli를 복사해 옵니다.
  • debian/libnginx-mod-brotli.nginx을 복사해 옵니다.
  • debian/libnginx-mod.conf/mod-brotli.conf를 복사해 옵니다.

References

  1. ^ "Releases - google/brotli". Retrieved 13 September 2020 – via GitHub.
  2. ^ Alakuijala, Jyrki; Szabadka, Zoltan (2016), RFC 7932: Brotli Compressed Data Format, Internet Engineering Task Force Request for Comments, Fremont, CA: IETF Trust.
 -  Finley, Klint (22 September 2015), "Hooli, I Mean Google, Gives Away Compression Code for Free", Wired Online, wired.com.

External links