1. Home
  2. Cloud a servery
  3. Virtuální server (VPS)
  4. Instalace proxy serveru Varnish na virtuální server

Instalace proxy serveru Varnish na virtuální server

Varnish je proxy server pro cachování výstupů webových aplikací. Nabízí vysokou míru konfigurovatelnosti a výrazně vyšší výkon a nižší spotřebu paměti. Při správné konfiguraci umožňuje serveru zvládnout mnohonásobně více návštevníků.

Varnish je nasazený před webový server a požadavky na portu 80. Poskytuje už předpřipravené HTML požadavky, čímž minimalizuje počet požadavků na které musí webserver vynaložit paměť a výkon CPU.

Jeho použití si vyžaduje v případe správy hostingů pomocí služby Server Manager dodatečnou konfiguraci po přidaní hostingu. Vhodný je zejména pokud na serveru běží pouze jeden hosting.

Přímou podporu pro Varnish mají následovné systémy:

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

Problémy s nasazením Varnish jsme zaznamenali u :

  • Moodle
  • Prestashop
  • SugarCRM
  • Koken

Instalace Varnish 


Ověřte, jestli je hostname serveru nastavený v souladu s DNS

hostname

hostname ­f

nainstalujeme balíček pro Varnish a případně další balíčky, na kterých je závislý

apt­get update

apt­get install varnish

také je vhodné nainstalovat pro ruční volání jeho funkcí utilitu curl

apt­get install curl

Konfigurace Varnish

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

Standardně Varnish poslouchá na portu 6081, změníme ho na 80

nano /etc/default/varnish

najdeme 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 \

parametr ­si určuje úložiště pro data a jeho velikost. Pokud máte server s nižší RAM (512MB), doporučujeme ho změnit na ­s file,

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

také změníme parametr START = yes aby se Varnish spustil i po restartu serveru .

Před jeho spuštěním je však potřeba také nakonfigurovat i webserver:

nano /etc/apache2/ports.conf

listen 80;

změníme na

listen 8080;

Také je potřeba port změnit v konfiguračních souborech Apache2 pro hosting(y), můžete to udělat snadno pro všechny konfigurační soubory pomocí příkazu sed:

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

Chování Varnish je možné upravit a ladit pomocí souboru /etc/varnish/default.vcl , protože je ale každá aplikace specifická, neexistuje univerzální nastavení, které funguje pro všechny.

Základním prvkem, ovlivňujícím chování Varnish, jsou HTTP hlavičky generované aplikací, webserverom nebo prohlížečem návštěvníka. Na webu je dostupných vícero návodů k jednotlivým aplikacím.

Podělíme se však o několik základních triků s ohledem na často používané CMS:

backend default {

.host = „127.0.0.1“;

.port = „8080“;

.first_byte_timeout = 300s;

}

zde se určuje standardní backend, kam jsou požadavky směřované, tedy v našem případě Apache2

Pokud byste potřebovali přidat další, je potřeba ho označit vlastní značkou, např.:

backend google {

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

.port = „80“;

}

Pro ruční pročištění záznamu v cache se použije request typu PURGE na URL , která se má promazat. Které IP adresy mohou tento request poslat určuje direktiva acl_purge

acl purge {

„firemnyserver.noip.org“;

„wordpress.domena.tld“;

„domena.tld“;

„localhost“;

}

Následné pročištění dané URL je realizované v 

sub vlc_recv{ přidáním

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

if (!client.ip ~ purge) {

}

}

a v

sub vcl_hit {

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

}

}

sub vcl_miss {

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

}

}

Pro správná fungování gzip komprese je do sub vcl_recv {

na jeho začátek přidat

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;

}

}

Jelikož Varnish cachuje pouze nezměněné soubory, změna v HTTP hlavičkách znamená, že se soubor cachovat nebude. CMS většinou nastavují poměrně mnoho hlaviček, přičemž však v případě statického obsahu toto není potřeba.

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;

}

Cachování pouze requestů typu GET a POST docílíme přes:

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;

}

Pro zamezení cachování AJAX requestů ve WordPressu a přistupů vyžadujících si přihlášení:

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ásledně je potřeba restartovat Apache2 a Varnish .

service apache2 restart

service varnish start

Aktualizováno: 24 června, 2021

Byl tento článek užitečný?

Related Articles

Zákaznická podpora
24 hodin denně, 7 dní v týdnu
KONTAKTOVAT PODPORU