Raspberry Pi webserver - mod_deflate a mod_expires

Pokud z Raspberry Pi uděláme webový server, musíme se důkladně zaměřit na to, aby se jednotlivé stránky načítaly co nejrychleji a uživatel nemusel zbytečně čekat. Jak tedy pomocí několika jednoduchých triků zrychlit načtení stránky?

Aktivujte kompresi - mod_deflate

Mod_deflate v Apache serveru slouží k automatické komprimaci přenášených dat. Většina webové stránky je běžně přenášena jako čistý text a vzhledem k tomu, že HTML je podmnožina XML, není to příliš optimální. Pokud před odesláním provedeme bezeztrátovou GZIP kompresi přenášených dat, ušetříme až 90% velikosti. A to už může být například na mobilním připojení znát.

Je dobré, že mod_deflate celou komprimaci zařídí za nás, aniž bychom museli jakkoliv měnit obsah webu. Dokonce bude komprimaci provádět jen tehdy, pokud klient dokáže přenesený obsah opět úspěšně dekomprimovat.

Co všechno se vyplatí komprimovat?

Komprimace přenášeného obsahu ale spotřebovává trochu výkonu webserveru a tak je dobré nekomprimovat všechno, ale jen to, co má smysl. Například obrázky už jsou většinou komprimované a tak další kompresí již nic neušetříme.

Vyplatí se tedy mod_deflate aktivovat pro
HTML
XML
Javascripty
CSS
textový obsah

Aktivace a nastavení mod_deflate

Aktivace mod_deflate se provádí pomocí
sudo a2enmod deflate

Případná dekativace se pak provádí pomocí příkazu
sudo a2dismod deflate

Po úspěšném zapnutí nebo vypnut mod_deflate je nutné restartovat Apache server.
sudo apachectl

Konfigurace mod_deflate se provádí v souboru
/etc/apache2/mods-available/deflate.conf
Výchozí konfigurace je ale pro začátek dostačující.

Využijte načítání do mezipaměti prohlížeče – mod_expires nebo mod_headers

Další důležitou věcí, která umí výrazně zvýšit výkon vašeho webového serveru pro návštěvníky, je cachování statických souborů. Proč návštěvíkovi stále dokola posílat všechny bannery a obrázky, když se zcela jistě, za těch pár vteřin od posledního kliknutí, nezměnily. Každému souboru, který posíláme, můžeme v hlavičkách nastavit expiraci a webové prohlížeče si pak tento soubor nacachují a při příštím požadavku ho již znovu nestahují. K dalšímu stažení pak dojde až po uplynutí nastavené doby.

Čemu nastavovat expiraci?

Opět jako u mod_deflate je několik typů souborů, kterým se vyplatí expiraci nějak smysluplně nastavit. Zcela určitě se vyplatí ji nastavit pro všechen statický obsah vašich stránek. Obrázky, CSS styly a Javascripty se u rozběhlého webu mění jen málokdy, takže jejich cachování není problém.

V případě, že potřebujete soubor změnit a vyhnout se tomu, že některým návštěvníkům se stále bude načítat z cache, je nutné změnit jméno souboru. Ve stránce je pak možné doplnit za název souboru ?1.

Aktivace a nastavení cachování

Cachování je možné opět zapnout bez toho, abychom museli jakkoliv zasahovat do našich stránek a museli v nich cokoliv měnit. Pro cachování je možné v Apache využít dva mody. Mod_expires nebo mod_headers.
Oba dva mody je nutné aktivovat.

Nastavení mod_headers

Aktivace se provádí pomocí příkazu
sudo a2enmod headers

Do .htaccess je pak potřeba přidat například
<IfModule mod_headers.c>
  # WEEK
  <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=604800, public"
  </FilesMatch>

  # WEEK
  <FilesMatch "\.(js|css|swf)$">
    Header set Cache-Control "max-age=604800"
  </FilesMatch>
</IfModule>


Nastavení mod_expires

Aktivace se provádí příkazem
sudo a2enmod expires

Ukázkový .htaccess je například
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault A600
  ExpiresByType text/javascript A604800
  ExpiresByType application/javascript A604800
  ExpiresByType text/css A604800
  ExpiresByType image/gif A604800
  ExpiresByType image/png A604800
  ExpiresByType image/jpeg A604800
  ExpiresByType image/x-icon A604800
  ExpiresByType text/html A60
</IfModule>


Shrnutí provedených optimalizací

Aktivací mod_deflate a mod_expires nebo mod_headers docílíme značného zvýšení výkonu webových stránek. Pokud návštěvník surfuje například na mobilním EDGE připojení, je to vidět na první pohled. První přístup na webové stránky trvá o trochu déle, protože se musí postahovat kde co, ale další pohyb na webových stránkách je už výrazně plynulejší Nestahuje se totiž spousta obrázků a styl stránky a javascripty jsou již také načteny. Jediné co se stahuje je konkrétní stránka, která je komprimována takže se přenáší výrazně méně dat.

Nemuseli jsme kvůli tomu změnit ani řádku kódu webových stránek!

Pokud by na Raspberry Pi bylo možné nainstalovat mod_pagespeed od Googlu, bylo by možné i další optimalizace provádět bez zásahů do kódu webových stránek. Ale to bohužel možné není a tak se v příštím článku zaměřím na to, jak dosáhnout dalších optimalizací jednoduchými úpravami webových stránek.

Změny výkonu je možné kontrolovat například nástrojem PageSpeed Insights nebo na stránce Pingdom Website Speed Test.

Raspberry Pi, Webserver, Apache, Mod_deflate, Mod_expires, Komprese, Expirace

- (27. 7. 2017)
Kája z Norska
Kája z Norska

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.