HTML-Seiten und andere gut komprimierbare Inhalte in komprimierter Form auszuliefern, spart Bandbreite und erhöht die Performance… üblicherweise. Leider gilt dieser Grundsatz nicht für schwache Hardware wie Embedded-ARM-Boards wie den Cubietruck, Raspberry-PI oder Banana-PI. Hier ist es sinnvoll die auszuliefernden Dateien bereits komprimiert auf der Platte abzulegen und so die Prozessorleistung nicht für die Kompression zu verschwenden.

GZIP-Static wird in der nginx.conf folgendermaßen aktiviert:

# RSP: Support serving pre-compressed static files, disallow on-demand compression to reduce CPU load
        gzip off;
        gzip_vary off;
        gzip_comp_level 1;
        gzip_static on;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css application/json application/x-javascript text/xml text/x-js application/xml+rss text/javascript image/svg+xml application/atom+xml application/xml;
        gzip_proxied expired no-cache no-store private auth;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";

Nun muss man die entsprechenden Dateien nur noch auf der Fesplatte komprimiert ablegen. Dazu finden man so manche auf find & Co. basierende Skripte, die via Cron-Job das WWW-Verzeichnis durchstöbern und alle in Frage kommenden Dateien komprimieren. Aus meiner Sicht ist dies nicht günstig, weil die Dateien zum einen vom unkomprimierten Original abweichen können und zum anderen nicht direkt nach dem Erzeugen der Datei zur Verfügung stehen. Ich empfehle die Dateien via inotify bei der Erzeugung bzw. beim Modifizieren neu zu komprimieren. Dazu dient dieses im Hintergrund laufende BASH-Skript:

#!/bin/bash
 
inotifywait -m -q -e CREATE -e MODIFY -e MOVED_TO -e DELETE -e MOVED_FROM -r "/var/www/localhost/htdocs/" -c --excludei '\.(jpg|png|gif|ico|log|sql|zip|gz|pdf|php|swf|ttf|eot|woff|)$' |
        while read file
        do
                file=( ${file//,/ } )
                pathname=${file[0]}
                action=${file[1]}
                filename=${file[2]}
                if [[ $filename =~ \.(html|css|js|xml|json|sfw)$ ]];
                then
                        if [[ $action == @(DELETE|MOVED_FROM) ]];
                        then
                                rm -f $pathname$filename.gz
                        elif [[ $action == @(CREATE|MODIFY|MOVED_TO) ]];
                        then
                                gzip -f -c -9 $pathname$filename > $pathname$filename.gz
                        fi

                fi
        done

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Name *

fünf + 20 =