Apache의 mod_brotli를 설치해보십시오.

예전부터 궁금했던 브로틀리.
Google이 개발한 이 새로운 압축 기술

결론부터 말하자면 기존 압축 기술인 Gzip에 비해 압축 후 크기로 우위가 있다고 해도
내가 현재 가지고있는 환경, Amazon Linux에 yum으로 설치하는 Apache에서는 지원하지 않기 때문에
설치 방법을 바꾸고까지 채용할 정도가 아니라고 생각했습니다.

이번에는 brotli 및 Apache의 mod_brotli Linux 환경에서의 설치에 대해 정리하고 싶습니다.
또, gzip과의 비교로서 벤치마크도 실시했으므로, 그것에 대해서는 후일 다른 기사에서 소개할 수 있으면 좋겠습니다.

아파치 공식 문서 확인하면
아파치 2.4.26 이상에서 사용할 수있는 것 같습니다.

내가 가지고 있는 환경(Amazon Linux)에 yum으로 들어 있는 httpd는 2.4.25로, 아웃이었습니다.
새 버전이 있는지 확인해 보면
$ yum info httpd24
Installed Packages
Name        : httpd24
Arch        : x86_64
Version     : 2.4.27
Release     : 3.75.amzn1
Size        : 4.1 M
Repo        : installed
From repo   : amzn-main
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

2.4.27, 라고 하는 것으로 갈 것 같습니다.
yum update httpd24 로 업데이트합니다.

gzip 압축 모듈인 mod_deflatell처럼SetOutputFilter BROTLI_COMPRESS를 conf 파일에 추가하고 다시 시작합니다.

그런데 브라우저에서 확인해 보더라도 응답 헤더에는 "br"문자열이 없습니다.
압축이 걸리지 않는 것 같습니다.
그래서 apache의 오류 로그를 살펴보면,
an unknown filter was not added: BROTLI_COMPRESS

라는 오류가 출력되었습니다.
그래서/etc/httpd/modules 부하를 찾아 보는 것도 mod_brotli적인 것은 없습니다.
yum으로 업데이트해도 들어있는 것은 아닌 것 같습니다.

그래서 소스에서 설치하려고합니다.

mod_brotli를 소스에서 컴파일하고 설치



먼저 브로틀리 저장소을 복제합니다.
나열된 단계에 따라 cmake로 설치합니다.
(cmake는 없었기 때문에 yum install cmake 하고 있습니다)
git clone https://github.com/google/brotli
mkdir out && cd out
../configure-cmake
make
make test
make install

이제 /usr/local/bin에 brotli가 설치됩니다.

그런 다음 Apache Httpd를 소스에서 컴파일하고 설치합니다.

여기에서 소스를 다운로드하고 확장.
생각하면 apache를 소스에서 설치한 것은 처음입니다.

brotli 를 사용하고 싶기 때문에 --with-brotli 옵션을 지정해 configure 합니다.
./configure --with-ssl --with-mpm=prefork --enable-rewrite --with-brotli=/usr/local
make
make install

그러면 /usr/local/apache2에 httpd가 설치됩니다. httpd.conf를 보면
#LoadModule brotli_module modules/mod_brotli.so

이기 때문에,이 녀석을 코멘트 인. modules 아래를 찾아 보면.
/usr/local/apache2/modules/mod_brotli.so
가 있는지 확인할 수 있다고 생각합니다.
드디어 apache를 시작하려고 합니다.
/usr/local/apache2/bin/apachectl -t
httpd: Syntax error on line 106 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/mod_brotli.so into server: libbrotlienc.so.1: cannot open shared object file: No such file or directory

뭔가 잘 가고 있지 않은 것 같습니다.
여기서 상당히 집어 들었지만, 조사해 보았습니다.
도서관 관계가 잘되지 않은 것 같습니다. .
echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
ldconfig

이것으로 제대로 apache가 mod_brotli.so를 인식하는 것 같습니다.

적절한 conf 파일에 다음을 추가한다.
SetOutputFilter BROTLI_COMPRESS
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli

브라우저로 확인하면・・・.



Response Header의 "Content-Encoding"곳에 "br"이 보였습니다!
Gzip과 비교해 보았습니다.

좋은 웹페이지 즐겨찾기