1. Báza znalostí
  2. Cloud a servery
  3. Virtuálny server (VPS)
  4. Inštalácia proxy servera Varnish na virtuálny server

Inštalácia proxy servera Varnish na virtuálny server

Varnish je proxy server pre cachovanie výstupov webových aplikacií. Ponúka vysokú mieru konfigurovateľnosti a výrazne vyšší výkon a nižšiu spotrebu pamäte. Pri správnej konfigurácii umožňuje serveru zvládnuť mnohonásobne viac návštevníkov.

Varnish je nasadený pred webový server a požiadavky na porte 80. Poskytuje už predpripravené HTML požiadavky, čím minimalizuje počet požiadaviek na ktoré musí webserver vynaložiť pamäť a výkon CPU.

Jeho použitie si vyžaduje v prípade správy hostingov pomocou služby Server Manager dodatočnú konfiguráciu po pridaní hostingu. Vhodný je najmä pokiaľ na serveri beží iba jeden hosting.

Priamu podporu pre Varnish majú nasledovné systémy:

  • WordPress
  • Multisite WordPress
  • Magento
  • Mediawiki
  • Drupal
  • Joomla

Problémy s nasadením Varnish sme zaznamenali pri :

  • Moodle
  • Prestashop
  • SugarCRM
  • Koken

Inštalácia Varnish 


Overte, či je hostname servera nastavený v súlade s DNS

hostname

hostname ­f

nainštalujeme balíček pre Varnish a prípadne ďalšie balíčky, od ktorých je závislý

apt­get update

apt­get install varnish

takisto je vhodné inštalovať pre ručné volanie jeho funkcií utilitu curl

apt­get install curl

Konfigurácia Varnish


1. nastavíme Apache na port 8080 a Varnish na port 80

Štandardne Varnish počúva na porte 6081, zmeníme ho na 80

nano /etc/default/varnish

nájdeme blok

DAEMON_OPTS=“­a :6081 \

T localhost:6082

f /etc/varnish/default.vcl \

S /etc/varnish/secret \

a nahradíme ho

DAEMON_OPTS=“­a :80 \

T localhost:6082 \

f /etc/varnish/default.vcl \

S /etc/varnish/secret \

parameter ­si určuje úložisko pre dáta a jeho veľkosť. Pokiaľ máte server s nižšou RAM (512MB), odporúčame ho zmeniť na ­s file,

/var/lib/varnish/$INSTANCE/varnish_storage.bin,96M“

taktiež zmeníme parameter START = yes aby sa Varnish spustil aj po reštarte servera .

Pred jeho spustením je však potrebné taktiež nakonfigurovať aj webserver:

nano /etc/apache2/ports.conf

listen 80;

zmeníme na

listen 8080;

Taktiež je potrebné port zmeniť v konfiguračných súboroch Apache2 pre hosting(y), možete to spravit ľahko pre všetky konfiguračné súbory pomocou príkazu sed:

sed ­i ‚s/\:80/\:8080/‘ /etc/apache2/sites­enabled/*

Správanie Varnish je možné upraviť a ľadiť pomocou súboru /etc/varnish/default.vcl , nakoľko je každá aplikácia špecifická, neexistuje univerzálne nastavenie, ktoré funguje pre všetky.

Zakladným prvkom ovplyvňujúcim správanie Varnish sú HTTP hlavičky generované aplikáciou, webserverom alebo prehľiadačom návštevníka. Na webe je dostupných viacero návodov k jednotlivým aplikáciam.

Podelíme sa však o niekoľko základných trikov s ohľadom na často používané CMS:

backend default {

.host = „127.0.0.1“;

.port = „8080“;

.first_byte_timeout = 300s;

}

tu sa určuje štandardný backend, kam sú požiadavky smerované, teda v našom prípade Apache2

Ak by ste potrebovali pridať ďalší, je potrebné ho označiť vlastným návestím, napr.:

backend google {

.host = „209.85.229.106“; /*www.google.com“;*/

.port = „80“;

}

Pre ručné prečistenie záznamu v cache sa použije request typu PURGE na URL , ktorá sa má premazať. Ktoré IP adresy môžu tento request poslať určuje direktíva acl_purge

acl purge {

„firemnyserver.noip.org“;

„wordpress.domena.tld“;

„domena.tld“;

„localhost“;

}

Následné prečistenie danej URL je realizované v 

sub vlc_recv{ pridanim

if (req.request == „PURGE“) {

if (!client.ip ~ purge) {

}

}

a v

sub vcl_hit {

if (req.request == „PURGE“) {

}

}

sub vcl_miss {

if (req.request == „PURGE“) {

}

}

Pre správne fungovanie gzip kompresie je do sub vcl_recv {

na jeho začiatok pridať

if (req.http.Accept­Encoding) {

if (req.url ~ „\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$“) {

# No point in compressing these

remove req.http.Accept­Encoding;

} else if (req.http.Accept­Encoding ~ „gzip“) {

set req.http.Accept­Encoding = „gzip“;

purge_url(req.url);

error 200 „Purged“;

error 404 „Not in cache“;

} else if (req.http.Accept­Encoding ~ „deflate“) {

set req.http.Accept­Encoding = „deflate“;

} else {

# unknown algorithm

remove req.http.Accept­Encoding;

}

}

Keďže Varnish cachuje iba nezmenené súbory, zmena v HTTP hlavičkách znamená, že sa súbor cachovať nebude. CMS väčšinou nastavujú pomerne veľa hlavičiek, pričom však v prípade statického obsahu toto nie je želané.

if (req.request != „GET“ &&

req.request != „HEAD“ &&

req.request != „PUT“ &&

req.request != „POST“ &&

req.request != „TRACE“ &&

req.request != „OPTIONS“ &&

req.request != „DELETE“) {

/* Non­RFC2616 or CONNECT which is weird. */

pipe;

}

Cachovanie iba requestov typu GET a POST docielime cez:

if (req.request != „GET“ && req.request != „HEAD“) {

}

if (req.http.Cookie) {

and special persistent p_* cookies.

/* We only deal with GET and HEAD by default */

pass;

# We only care about the „__ac.*“ cookies, used for authentication

if (req.http.Cookie ~ „__ac.*“ ) {

}

# Else strip all cookies

remove req.http.Cookie;

}

Pre zamedzenie cachovania AJAX requestov vo WordPresse a pristupov vyžadujúcich si prihlásenie:

if (req.http.Cookie ~ „wordpress_logged_in_“) {

return (pipe);

}

# don’t cache for users logged into WP backend

if (req.http.Cookie ~ „wordpress_logged_in_“) {

return (pipe);

}

if (req.url ~ „wp­(login|admin)“ || req.url ~ „preview=true“ || req.url ~ „xmlrpc.php“ ) {

return (pipe);

}

# don’t cache ajax requests

if (req.http.X­Requested­With == „XMLHttpRequest“) {

return (pipe);

}

následne je potrebné reštartovať Apache2 a Varnish .

service apache2 restart

service varnish start

Aktualizované 16. júla 2020

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu