Wydrukuj tę dokumentację Pokaż jako slajdy

Konfiguracja oraz uruchomienie mod_brotli

brotli to szybka i dość lekka kompresja będąca bardziej sprawą w stosunku do GZIPa.

Przygotowanie plików w drzewie katalogów

cd /var/www/htdocs/virtuals/__VIRTUAL_HOST__/data

for x in `find ./ -type f -name '*.css'`; do bro --force --input $x --output ${x}.br ; done
for x in `find ./ -type f -name '*.css'`; do gzip -c $x > ${x}.gz ; done
for x in `find ./ -type f -name '*.js'`; do bro --force --input $x --output ${x}.br ; done
for x in `find ./ -type f -name '*.js'`; do gzip -c $x > ${x}.gz ; done
for x in `find ./ -type f -name '*.html'`; do bro --force --input $x --output ${x}.br ; done
for x in `find ./ -type f -name '*.html'`; do gzip -c $x > ${x}.gz ; done

Konfiguracja w Apache

httpd.conf

LoadModule brotli_module libexec/apache24/mod_brotli.so

Konfiguracja VirtualHost

Definicja katalogu

<Directory "/var/www/htdocs/virtuals/__VIRTUAL_HOST__/data">
    # Specify Brotli-encoded assets
    <Files *.js.br>
        AddType "text/javascript" .br
        AddEncoding br .br
    </Files>
    <Files *.css.br>
        AddType "text/css" .br
        AddEncoding br .br
    </Files>
    <Files *.svg.br>
        AddType "image/svg+xml" .br
        AddEncoding br .br
    </Files>
    <Files *.html.br>
        AddType "text/html" .br
        AddEncoding br .br
    </Files>

    # Specify gzip-encoded assets
    <Files *.js.gz>
        AddType "text/javascript" .gz
        AddEncoding gz .gz
    </Files>
    <Files *.css.gz>
        AddType "text/css" .gz
        AddEncoding gz .gz
    </Files>
    <Files *.svg.gz>
        AddType "image/svg+xml" .gz
        AddEncoding gz .gz
    </Files>
    <Files *.html.gz>
        AddType "text/html" .gz
        AddEncoding gz .gz
    </Files>

    <IfModule mod_php5.c>
# [...]

Definicja właściwego VH

/!\ UWAGA /!\ Ważna jest kolejność definicji kompresji. BROtli powinno być pierwsze, inaczej zostanie wybrany mod_deflate.

# [...]
      <IfModule mod_headers.c>
      # [...]
          <IfModule mod_brotli.c>
              # Serve br compressed CSS files if they exist
              # and the client accepts br.
              RewriteCond "%{HTTP:Accept-encoding}" "br"
              RewriteCond "%{REQUEST_FILENAME}\.br" -s
              RewriteRule "^(.*)\.css" "$1\.css\.br" [QSA]

              # Serve br compressed JS files if they exist
              # and the client accepts br.
              RewriteCond "%{HTTP:Accept-encoding}" "br"
              RewriteCond "%{REQUEST_FILENAME}\.br" -s
              RewriteRule "^(.*)\.js" "$1\.js\.br" [QSA]

              # Serve correct content types, and prevent mod_brotli double br.
              RewriteRule "\.css\.br$" "-" [T=text/css,E=no-br:1]
              RewriteRule "\.js\.br$" "-" [T=text/javascript,E=no-br:1]

              <FilesMatch "(\.js\.br|\.css\.br)$">
                  # Serve correct encoding type.
                  Header append Content-Encoding br

                  # Force proxies to cache brped &
                  # non-brped css/js files separately.
                  Header append Vary Accept-Encoding
              </FilesMatch>

              AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon
              BrotliFilterNote Input brotli_input_info
              BrotliFilterNote Output brotli_output_info
              BrotliFilterNote Ratio brotli_ratio_info
              LogFormat '"%r" %{brotli_output_info}n/%{brotli_input_info}n (%{brotli_ratio_info}n%%)' brotli
              #CustomLog "|/usr/local/sbin/rotatelogs -n 7 /var/log/httpd/forum.vectraklub.pl/brotli.log 86400" brotli

              #Don't compress content which is already compressed
              #SetEnvIfNoCase Request_URI \ \.(gif|jpe?g|png|swf|woff|woff2) no-brotli dont-vary

              # Make sure proxies don't deliver the wrong content
              #Header append Vary User-Agent env=!dont-vary
          </IfModule>

          <IfModule mod_deflate.c>
              # Serve gzip compressed CSS files if they exist
              # and the client accepts gzip.
              RewriteCond "%{HTTP:Accept-encoding}" "gzip"
              RewriteCond "%{REQUEST_FILENAME}\.gz" -s
              RewriteRule "^(.*)\.css" "$1\.css\.gz" [QSA]

              # Serve gzip compressed JS files if they exist
              # and the client accepts gzip.
              RewriteCond "%{HTTP:Accept-encoding}" "gzip"
              RewriteCond "%{REQUEST_FILENAME}\.gz" -s
              RewriteRule "^(.*)\.js" "$1\.js\.gz" [QSA]

              # Serve correct content types, and prevent mod_deflate double gzip.
              RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
              RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]

              <FilesMatch "(\.js\.gz|\.css\.gz)$">
                  # Serve correct encoding type.
                  Header append Content-Encoding gzip

                  # Force proxies to cache gzipped &
                  # non-gzipped css/js files separately.
                  Header append Vary Accept-Encoding
              </FilesMatch>

              AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon
              DeflateFilterNote Input input_info
              DeflateFilterNote Output output_info
              DeflateFilterNote Ratio ratio_info
              LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
              #CustomLog "|/usr/local/sbin/rotatelogs -n 7 /var/log/httpd/forum.vectraklub.pl/deflate.log 86400" deflate

              #Don't compress content which is already compressed
              #SetEnvIfNoCase Request_URI \ \.(gif|jpe?g|png|swf|woff|woff2) no-gzip dont-vary

              # Make sure proxies don't deliver the wrong content
              #Header append Vary User-Agent env=!dont-vary
          </IfModule>
# [...]

Źródła w sieci internet


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.