httpd 에서 2.4.26 버전 이상에서 지원하는 데이터 압축 모듈이다.
deflate_module 의 경우 gzip 압축을 이용하여 데이터 전송을 하고 brotli_module 의 경우 br 으로 압축하여 전송한다.
brotli 압축 기술은 구글에서 공개한 압축기술중 속도 위주의 압축기술이다. (gzip 보다 압축률이 20–26% 더 좋다고 한다.)
https://opensource.googleblog.com/2015/09/introducing-brotli-new-compression.html
아파치에 mod_brotli 설치는 아래 github 내용을따라 설치할 수 있다.
https://github.com/google/brotli
설치가 된 이후에는 아래와 같이 defate 및 brotli 설정을 한다. (https://www.unixadm.org/needful-things/brotli)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<IfModule filter_module> <IfModule brotli_module> FilterDeclare COMPRESS_BR CONTENT_SET FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^text/html\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^text/plain\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^text/xml\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^text/css\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^text/javascript\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^text/x-component\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/javascript\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/x-javascript\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/json\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/xml\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/xhtml\+xml\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/rss\+xml\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/atom\+xml\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/vnd\.ms-fontobject\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^image/svg\+xml\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^image/x-icon\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^image/vnd\.microsoft\.icon\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/x-font-ttf\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/font-sfnt\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^application/vnd\.ms-fontobject\b#" FilterProvider COMPRESS_BR BROTLI_COMPRESS "%{Content_Type} =~ m#^font/opentype\b#" FilterProtocol COMPRESS_BR BROTLI_COMPRESS change=yes;byteranges=no </IfModule> <IfModule deflate_module> <IfModule setenvif_module> BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </IfModule> FilterDeclare COMPRESS_GZ CONTENT_SET FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^text/html\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^text/plain\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^text/xml\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^text/css\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^text/javascript\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^text/x-component\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/javascript\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/x-javascript\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/json\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/xml\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/xhtml\+xml\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/rss\+xml\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/atom\+xml\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/vnd\.ms-fontobject\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^image/svg\+xml\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^image/x-icon\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^image/vnd\.microsoft\.icon\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/x-font-ttf\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/font-sfnt\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^application/vnd\.ms-fontobject\b#" FilterProvider COMPRESS_GZ DEFLATE "%{Content_Type} =~ m#^font/opentype\b#" FilterProtocol COMPRESS_GZ DEFLATE change=yes;byteranges=no FilterTrace COMPRESS_GZ 1 </IfModule> <If "%{HTTP:Accept-Encoding} =~ /\bbr\b/"> <IfModule brotli_module> FilterChain COMPRESS_BR </IfModule> <IfModule !brotli_module> <If "%{HTTP:Accept-Encoding} =~ /\bdeflate\b/"> <IfModule deflate_module> FilterChain COMPRESS_GZ </IfModule> </If> </IfModule> </If> <ElseIf "%{HTTP:Accept-Encoding} =~ /\bdeflate\b/"> <IfModule deflate_module> FilterChain COMPRESS_GZ </IfModule> </ElseIf> </IfModule> |
설정은 브라우져 지원 여부에 따라 brotli 으로 전송하거나, gzip 전송을 선택하여 전송하게 되며
둘다 지원 못하는 브라우져의 경우 압축되지 않고 전송한다.