Varnish: Difference between revisions
m " puudu |
mNo edit summary |
||
Line 1: | Line 1: | ||
= Kaasajastab Lauri-Rihard Liba, 2015, A21 = | = Kaasajastab Lauri-Rihard Liba, 2015, A21 = | ||
= Koostajad = | = Koostajad = | ||
<!-- | <!-- | ||
Vajab täiendamist. Lingi http://blog.rac.me.uk/2009/11/29/linux-handy-varnish-commands/ alusel. | Vajab täiendamist. Lingi http://blog.rac.me.uk/2009/11/29/linux-handy-varnish-commands/ alusel. | ||
Line 6: | Line 8: | ||
--> | --> | ||
Rene Sepp, Kersti Lang, Carolys Kallas | Rene Sepp, Kersti Lang, Carolys Kallas | ||
= Sissejuhatus = | = Sissejuhatus = | ||
Varnish Cache kasutatakse veebilehekülgede kiirendamiseks. See installeeritakse HTTP serveri ette ning tehakse vastavad muutused sisu puhverdamiseks. Varnish Cache tavaliselt kiirendab andmete laadimist 300-1000 kordselt sõltuvalt veebilehe ülesehitusest. Varnish Cache hoiab veebilehti vahemälus kiirendades sellega javaskriptide ning piltide laadimist. Lisaks kasutatakse seda ka koormuse tasakaalustamiseks ning turvalisuse suurendamiseks. | Varnish Cache kasutatakse veebilehekülgede kiirendamiseks. See installeeritakse HTTP serveri ette ning tehakse vastavad muutused sisu puhverdamiseks. Varnish Cache tavaliselt kiirendab andmete laadimist 300-1000 kordselt sõltuvalt veebilehe ülesehitusest. Varnish Cache hoiab veebilehti vahemälus kiirendades sellega javaskriptide ning piltide laadimist. Lisaks kasutatakse seda ka koormuse tasakaalustamiseks ning turvalisuse suurendamiseks. | ||
= Ajalugu = | = Ajalugu = | ||
Projekti algatas Norra suurim tabloidformaadis ajaleht Verdens Gang. Arhitekt ja juhtiv arendaja on Taani konsultant Poul-Henning Kamp (tuntud kui FreeBSDcore arendaja). Haldus, infrastruktuuri - ja täiendavat arendust varustas algselt Norra Linux konsultatsioonifirma Linpro. Varnish Cache tugi, haldus ja arendus koondus hiljem eraldi haruks - Varnish Software. | Projekti algatas Norra suurim tabloidformaadis ajaleht Verdens Gang. Arhitekt ja juhtiv arendaja on Taani konsultant Poul-Henning Kamp (tuntud kui FreeBSDcore arendaja). Haldus, infrastruktuuri - ja täiendavat arendust varustas algselt Norra Linux konsultatsioonifirma Linpro. Varnish Cache tugi, haldus ja arendus koondus hiljem eraldi haruks - Varnish Software. | ||
Varnishi versioon 1.0 avalikustati aastal 2006, Varnish 2.0 aastal 2008, Varnish 3.0 aastal 2011 ja Varnish 4.0 aastal 2014. | Varnishi versioon 1.0 avalikustati aastal 2006, Varnish 2.0 aastal 2008, Varnish 3.0 aastal 2011 ja Varnish 4.0 aastal 2014. | ||
= Arhitektuur = | = Arhitektuur = | ||
Varnish Cache salvestab andmed virtuaalmällu ja jätab otsustada, mis salvestatakse mällu ja mida suunatakse ketta operatsioonisüsteemi. See aitab vältida olukorda, kus operatsioonisüsteem hakkab andmeid suunama vahemällu samal ajal kui nad paigutatakse rakenduse poolt kettale. | Varnish Cache salvestab andmed virtuaalmällu ja jätab otsustada, mis salvestatakse mällu ja mida suunatakse ketta operatsioonisüsteemi. See aitab vältida olukorda, kus operatsioonisüsteem hakkab andmeid suunama vahemällu samal ajal kui nad paigutatakse rakenduse poolt kettale. | ||
Lisaks on Varnishi tugevalt "keermestatud", iga kliendi ühendust käsitletakse kui eraldi "keeret". Kui seadistatud aktiivsete "keerete" arv on täidetud, paigutatakse sisenevad ühendused ülevoolu järjekorda. Kui kui see järjekord jõuab teatud piirini, hakkab süsteem sissetulevaid ühendusi tagasi lükkama. | Lisaks on Varnishi tugevalt "keermestatud", iga kliendi ühendust käsitletakse kui eraldi "keeret". Kui seadistatud aktiivsete "keerete" arv on täidetud, paigutatakse sisenevad ühendused ülevoolu järjekorda. Kui kui see järjekord jõuab teatud piirini, hakkab süsteem sissetulevaid ühendusi tagasi lükkama. | ||
Line 17: | Line 25: | ||
Arvu run-time parameetrid kontrollivad näiteks maksimaalset ja minimaalset aktiivsete keerete arvu, nende erinevaid süsteemipause jne. Käsurea juhtimise liides võimaldab neid parameetreid muuta, uusi VCL skripte kompileerida, laadida ja aktiveerida kiirendile taaskäivitust tegemata. | Arvu run-time parameetrid kontrollivad näiteks maksimaalset ja minimaalset aktiivsete keerete arvu, nende erinevaid süsteemipause jne. Käsurea juhtimise liides võimaldab neid parameetreid muuta, uusi VCL skripte kompileerida, laadida ja aktiveerida kiirendile taaskäivitust tegemata. | ||
Selleks, et vähendada süsteemi päringute arvu kiirelt miinimumini, on logi-andmed salvestatud mällu ning logi-andmete filtreerimine, vorminine ning kirjutamine aktiivsele kettale kettale. | Selleks, et vähendada süsteemi päringute arvu kiirelt miinimumini, on logi-andmed salvestatud mällu ning logi-andmete filtreerimine, vorminine ning kirjutamine aktiivsele kettale kettale. | ||
= Eeldused = | = Eeldused = | ||
Antud installatsiooni lahendus on testitud Ubuntu 14.04.2 LTS peal, kuid võib toimida muudel Debianil baseeruvate distributsioonide peal. Muude distributsioonide peal paigaldamiseks tasub uurida arendaja [https://www.varnish-cache.org/releases kodulehekülge]. | Antud installatsiooni lahendus on testitud Ubuntu 14.04.2 LTS peal, kuid võib toimida muudel Debianil baseeruvate distributsioonide peal. Muude distributsioonide peal paigaldamiseks tasub uurida arendaja [https://www.varnish-cache.org/releases kodulehekülge]. | ||
Eelduseks on töötav veebileht, näiteks [[Veebiserveri_labor|Apache]] vaikeleht või WordPressi leht. Kui seda tehtud pole, siis seda kirjeldab [[WordPress_turvamine|WordPress turvamise labor]]. | Eelduseks on töötav veebileht, näiteks [[Veebiserveri_labor|Apache]] vaikeleht või WordPressi leht. Kui seda tehtud pole, siis seda kirjeldab [[WordPress_turvamine|WordPress turvamise labor]]. | ||
= Varnishi paigaldamine turvalisuse suurendamiseks = | = Varnishi paigaldamine turvalisuse suurendamiseks = | ||
Varnish peatab mittetäielikel http päringutel jõudmast Apache2 veebiserverini. | Varnish peatab mittetäielikel http päringutel jõudmast Apache2 veebiserverini. | ||
Põhineb [http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian sellel] artiklil. | Põhineb [http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian sellel] artiklil. | ||
==Apache konfigureerimine== | ==Apache konfigureerimine== | ||
Apache2 tuleb kuulama panna localhost, selleks on vaja <code>/etc/apache2/ports.conf</code> konfiguratsiooni failis vaja muuta vaikimisi kuulamis port 80 pealt 8080 peale. | Apache2 tuleb kuulama panna localhost, selleks on vaja <code>/etc/apache2/ports.conf</code> konfiguratsiooni failis vaja muuta vaikimisi kuulamis port 80 pealt 8080 peale. | ||
<syntaxhighlight lang="apache"> | |||
:<syntaxhighlight lang="apache"> | |||
Listen 8080 | Listen 8080 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Järgmisena tuleb muuta virtualhosti failis olev kuulatav port. | Järgmisena tuleb muuta virtualhosti failis olev kuulatav port. | ||
Siin näites kasutame Apache2 vaikelehe konfiguratsiooni faili <code>/etc/apache2/sites-available/000-default.conf</code>. | Siin näites kasutame Apache2 vaikelehe konfiguratsiooni faili <code>/etc/apache2/sites-available/000-default.conf</code>. | ||
Kus tuleb muuta vaikimisi kuulatav port 80 meile vajalikuks port 8080 peale. Seda saab teha manuaalselt tekstiredaktoriga, kuid kui on vaja mitu faili muuta siis on mõtekas kasutusele võtta käsurea utiliit [[sed]] | Kus tuleb muuta vaikimisi kuulatav port 80 meile vajalikuks port 8080 peale. Seda saab teha manuaalselt tekstiredaktoriga, kuid kui on vaja mitu faili muuta siis on mõtekas kasutusele võtta käsurea utiliit [[sed]] | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
cd /etc/apache2/sites-available | cd /etc/apache2/sites-available | ||
sed 's/:80/:8080/' 000-default.conf -i | sed 's/:80/:8080/' 000-default.conf -i | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Paigaldame apachele lisamooduli, et kuvataks kliendi õige ip aadress. | Paigaldame apachele lisamooduli, et kuvataks kliendi õige ip aadress. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
apt-get install libapache2-mod-rpaf | apt-get install libapache2-mod-rpaf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Varnish Cache Paigaldus== | ==Varnish Cache Paigaldus== | ||
Õpetame apt utiliiti kasutama https teekondi | Õpetame apt utiliiti kasutama https teekondi | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
apt-get install apt-transport-https | apt-get install apt-transport-https | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Lisame Varnish Cache repositooriumi krüptovõtme | Lisame Varnish Cache repositooriumi krüptovõtme | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add - | curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add - | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Lisame Varnish Cache repositooriumi Ubuntu 14.04 Trusty Tahr jaoks oma apt utiliidi allikate loendisse | Lisame Varnish Cache repositooriumi Ubuntu 14.04 Trusty Tahr jaoks oma apt utiliidi allikate loendisse | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list | echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Uuendame repositooriumi ja paigaldame Varnish Cache | Uuendame repositooriumi ja paigaldame Varnish Cache | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
apt-get update && apt-get install varnish | apt-get update && apt-get install varnish | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Varnishi konfiguratsiooni muutmine== | ==Varnishi konfiguratsiooni muutmine== | ||
Muudame Varnishi konfiguratsiooni faili <code>/etc/default/varnish</code>, et Varnish kuulaks vaikimisi port 80 ja muudame reeglite faili asukohta. | Muudame Varnishi konfiguratsiooni faili <code>/etc/default/varnish</code>, et Varnish kuulaks vaikimisi port 80 ja muudame reeglite faili asukohta. | ||
<syntaxhighlight lang="c"> | |||
:<syntaxhighlight lang="c"> | |||
DAEMON_OPTS="-a :80 \ | DAEMON_OPTS="-a :80 \ | ||
-T localhost:6082 \ | -T localhost:6082 \ | ||
Line 65: | Line 96: | ||
-s malloc,256m" | -s malloc,256m" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Kopeerime vcl struktuuri vaikefailist <code>default.vcl</code> uude faili <code>meieleht.vcl</code>. | Kopeerime vcl struktuuri vaikefailist <code>default.vcl</code> uude faili <code>meieleht.vcl</code>. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
cp /etc/varnish/default.vcl /etc/varnish/meieleht.vcl | cp /etc/varnish/default.vcl /etc/varnish/meieleht.vcl | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Täiendame faili <code>meieleht.vcl</code>. | Täiendame faili <code>meieleht.vcl</code>. | ||
<syntaxhighlight lang="c"> | |||
:<syntaxhighlight lang="c"> | |||
sub vcl_recv { | sub vcl_recv { | ||
# Add a unique header containing the client address. | # Add a unique header containing the client address. | ||
Line 106: | Line 141: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Deemonite restart == | == Deemonite restart == | ||
Kõigepealt tuleb apache teenusele restart teha. | Kõigepealt tuleb apache teenusele restart teha. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
service apache2 restart | service apache2 restart | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Kontrollime IP porti. | Kontrollime IP porti. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
netstat -lp | grep apache2 | netstat -lp | grep apache2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Tulemus peab olema taoline: | Tulemus peab olema taoline: | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
tcp 0 0 localhost:8080 *:* LISTEN 4586/apache2 | tcp 0 0 localhost:8080 *:* LISTEN 4586/apache2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Teeme restarti Varnishile | Teeme restarti Varnishile | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
service varnish restart | service varnish restart | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Kontrollime uuesti | Kontrollime uuesti | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
netstat -lp | grep varnish | netstat -lp | grep varnish | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Tulemus peab olema taoline: | Tulemus peab olema taoline: | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
tcp 0 0 *:www *:* LISTEN 4498/varnishd | tcp 0 0 *:www *:* LISTEN 4498/varnishd | ||
tcp6 0 0 [::]:www [::]:* LISTEN 4498/varnishd | tcp6 0 0 [::]:www [::]:* LISTEN 4498/varnishd | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Nüüd on Varnish paigaldatud Apache2 ette ja sait peab nüüd töötama. Kui Apach2e peatada kuvatakse Varnish error lehekülg. | Nüüd on Varnish paigaldatud Apache2 ette ja sait peab nüüd töötama. Kui Apach2e peatada kuvatakse Varnish error lehekülg. | ||
= Logimine = | = Logimine = | ||
Veebilehe külastamisi saab jälgida <code>/var/log/varnish/access.log</code> logi failist. | Veebilehe külastamisi saab jälgida <code>/var/log/varnish/access.log</code> logi failist. | ||
== Apache logides serveri aadressi asemel kliendi aadress == | == Apache logides serveri aadressi asemel kliendi aadress == | ||
===Varnishi pool=== | ===Varnishi pool=== | ||
Lisada oma Varnish konfiguratsiooni .vcl read: | Lisada oma Varnish konfiguratsiooni .vcl read: | ||
Näiteks <code>/etc/varnish/meieleht.vcl</code> | Näiteks <code>/etc/varnish/meieleht.vcl</code> | ||
<syntaxhighlight lang="c"> | |||
:<syntaxhighlight lang="c"> | |||
sub vcl_recv { | sub vcl_recv { | ||
# Add a unique header containing the client address | # Add a unique header containing the client address | ||
Line 147: | Line 202: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Taaskäivita Varnish teenus. | Taaskäivita Varnish teenus. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
service varnish restart | service varnish restart | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Apache pool === | ===Apache pool === | ||
Lisada vajalikud moodulid Apache jaoks | Lisada vajalikud moodulid Apache jaoks | ||
Tuleb luua fail <code>/etc/apache2/conf.d/varnishlog.conf</code> järgneva sisuga: | Tuleb luua fail <code>/etc/apache2/conf.d/varnishlog.conf</code> järgneva sisuga: | ||
<syntaxhighlight lang="apache"> | |||
:<syntaxhighlight lang="apache"> | |||
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined | LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Enda virtualhost konfiguratsioonis muutke log vorming varnishcombined-ks | Enda virtualhost konfiguratsioonis muutke log vorming varnishcombined-ks | ||
<syntaxhighlight lang="apache"> | |||
:<syntaxhighlight lang="apache"> | |||
<VirtualHost *:80> | <VirtualHost *:80> | ||
ServerName www.planet.zz | ServerName www.planet.zz | ||
Line 166: | Line 228: | ||
</VirtualHost> | </VirtualHost> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Ja siis tuleb Apache2 teenus taaskäivitada. | Ja siis tuleb Apache2 teenus taaskäivitada. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
service apache2 restart | service apache2 restart | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Tulemuse kontroll=== | ===Tulemuse kontroll=== | ||
Ühenda kliendiga veebiserveri külge ja vaata Apache2 <code>access.log</code> faili, mis ip logitakse. | Ühenda kliendiga veebiserveri külge ja vaata Apache2 <code>access.log</code> faili, mis ip logitakse. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
tail /var/log/apache2/access.log | tail /var/log/apache2/access.log | ||
</syntaxhighlight> | </syntaxhighlight> | ||
= Security.VCL paigaldamine = | = Security.VCL paigaldamine = | ||
Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles. | Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles. | ||
Sarnaneb [[mod_security]]le, aga on palju kiirem. | Sarnaneb [[mod_security]]le, aga on palju kiirem. | ||
Esimese sammuna tuleks paigaldada vajalikud utiliidid: | Esimese sammuna tuleks paigaldada vajalikud utiliidid: | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
apt-get install git make | apt-get install git make | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Siis tuleks kloonida [[git]]i repositooriumis olev algmaterjal: | Siis tuleks kloonida [[git]]i repositooriumis olev algmaterjal: | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
git clone https://github.com/comotion/security.vcl.git | git clone https://github.com/comotion/security.vcl.git | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Järgmiste sammudena on vaja repositooriumis olev rakendus paigaldada ja luua sümboolne link Varnishi konfiguratsiooni kausta: | Järgmiste sammudena on vaja repositooriumis olev rakendus paigaldada ja luua sümboolne link Varnishi konfiguratsiooni kausta: | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
cd security.vcl/vcl/ | cd security.vcl/vcl/ | ||
sudo make | sudo make | ||
Line 193: | Line 267: | ||
sudo ln -s $PWD/vcl/ /etc/varnish/security | sudo ln -s $PWD/vcl/ /etc/varnish/security | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Lisa Varnishi .vcl conf faili järgnev rida <code>backend default</code> koodiploki alla: | Lisa Varnishi .vcl conf faili järgnev rida <code>backend default</code> koodiploki alla: | ||
<syntaxhighlight lang="c"> | |||
:<syntaxhighlight lang="c"> | |||
include "/etc/varnish/security/main.vcl"; | include "/etc/varnish/security/main.vcl"; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Välja peaks nägema nii: | Välja peaks nägema nii: | ||
<syntaxhighlight lang="c"> | |||
:<syntaxhighlight lang="c"> | |||
backend default { | backend default { | ||
.host = "127.0.0.1"; | .host = "127.0.0.1"; | ||
Line 207: | Line 285: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Taaskäivita Varnishi teenus. | Taaskäivita Varnishi teenus. | ||
<syntaxhighlight lang="teraterm"> | |||
:<syntaxhighlight lang="teraterm"> | |||
service varnish restart | service varnish restart | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Tulemuse kontroll == | == Tulemuse kontroll == | ||
Proovi nüüd minna enda veebiserveri külge aadressiga: | Proovi nüüd minna enda veebiserveri külge aadressiga: | ||
:<code><nowiki>http://<sinu serveri ip>/javascript:</nowiki></code> | :<code><nowiki>http://<sinu serveri ip>/javascript:</nowiki></code> | ||
Kui kõik toimib tuleb vastuseks: | Kui kõik toimib tuleb vastuseks: | ||
:<code>Error 403 Naughty, not nice!</code> | :<code>Error 403 Naughty, not nice!</code> | ||
<!-- | <!-- | ||
Kahtlen selle sektsiooni vajalikkuses, pole otsest seost Varnishi paigaldusega kuna Varnish ühildub kõigi nende serveritega. | Kahtlen selle sektsiooni vajalikkuses, pole otsest seost Varnishi paigaldusega kuna Varnish ühildub kõigi nende serveritega. | ||
Line 225: | Line 311: | ||
--> | --> | ||
= Kasutatud materjal = | = Kasutatud materjal = | ||
# [https://www.varnish-cache.org/about About Varnish] | # [https://www.varnish-cache.org/about About Varnish] | ||
# [https://www.varnish-cache.org/installation/ubuntu Varnishi paigaldus Ubuntus] | # [https://www.varnish-cache.org/installation/ubuntu Varnishi paigaldus Ubuntus] |
Revision as of 18:18, 24 May 2015
Kaasajastab Lauri-Rihard Liba, 2015, A21
Koostajad
Rene Sepp, Kersti Lang, Carolys Kallas
Sissejuhatus
Varnish Cache kasutatakse veebilehekülgede kiirendamiseks. See installeeritakse HTTP serveri ette ning tehakse vastavad muutused sisu puhverdamiseks. Varnish Cache tavaliselt kiirendab andmete laadimist 300-1000 kordselt sõltuvalt veebilehe ülesehitusest. Varnish Cache hoiab veebilehti vahemälus kiirendades sellega javaskriptide ning piltide laadimist. Lisaks kasutatakse seda ka koormuse tasakaalustamiseks ning turvalisuse suurendamiseks.
Ajalugu
Projekti algatas Norra suurim tabloidformaadis ajaleht Verdens Gang. Arhitekt ja juhtiv arendaja on Taani konsultant Poul-Henning Kamp (tuntud kui FreeBSDcore arendaja). Haldus, infrastruktuuri - ja täiendavat arendust varustas algselt Norra Linux konsultatsioonifirma Linpro. Varnish Cache tugi, haldus ja arendus koondus hiljem eraldi haruks - Varnish Software. Varnishi versioon 1.0 avalikustati aastal 2006, Varnish 2.0 aastal 2008, Varnish 3.0 aastal 2011 ja Varnish 4.0 aastal 2014.
Arhitektuur
Varnish Cache salvestab andmed virtuaalmällu ja jätab otsustada, mis salvestatakse mällu ja mida suunatakse ketta operatsioonisüsteemi. See aitab vältida olukorda, kus operatsioonisüsteem hakkab andmeid suunama vahemällu samal ajal kui nad paigutatakse rakenduse poolt kettale. Lisaks on Varnishi tugevalt "keermestatud", iga kliendi ühendust käsitletakse kui eraldi "keeret". Kui seadistatud aktiivsete "keerete" arv on täidetud, paigutatakse sisenevad ühendused ülevoolu järjekorda. Kui kui see järjekord jõuab teatud piirini, hakkab süsteem sissetulevaid ühendusi tagasi lükkama. Peamine seadistamise mehhanism on VCL (Varnishi Configuration Language).Enamus kasutajapoliitika otsuseid jäetakse VCL koodi, mis muudab Varnishi palju rohkem seadistatav ja kohanemisvõimelisemaks kui enamik teisi HTTP kiirendeid. Kui VLC script on laetud, tõlgitakse see "C" keelde, kompileeritakse, et jagada objektid süsteemi poolt kompilaatorisse ja seotakse otse kiirendiga. Arvu run-time parameetrid kontrollivad näiteks maksimaalset ja minimaalset aktiivsete keerete arvu, nende erinevaid süsteemipause jne. Käsurea juhtimise liides võimaldab neid parameetreid muuta, uusi VCL skripte kompileerida, laadida ja aktiveerida kiirendile taaskäivitust tegemata. Selleks, et vähendada süsteemi päringute arvu kiirelt miinimumini, on logi-andmed salvestatud mällu ning logi-andmete filtreerimine, vorminine ning kirjutamine aktiivsele kettale kettale.
Eeldused
Antud installatsiooni lahendus on testitud Ubuntu 14.04.2 LTS peal, kuid võib toimida muudel Debianil baseeruvate distributsioonide peal. Muude distributsioonide peal paigaldamiseks tasub uurida arendaja kodulehekülge. Eelduseks on töötav veebileht, näiteks Apache vaikeleht või WordPressi leht. Kui seda tehtud pole, siis seda kirjeldab WordPress turvamise labor.
Varnishi paigaldamine turvalisuse suurendamiseks
Varnish peatab mittetäielikel http päringutel jõudmast Apache2 veebiserverini. Põhineb sellel artiklil.
Apache konfigureerimine
Apache2 tuleb kuulama panna localhost, selleks on vaja /etc/apache2/ports.conf
konfiguratsiooni failis vaja muuta vaikimisi kuulamis port 80 pealt 8080 peale.
Listen 8080
Järgmisena tuleb muuta virtualhosti failis olev kuulatav port.
Siin näites kasutame Apache2 vaikelehe konfiguratsiooni faili /etc/apache2/sites-available/000-default.conf
.
Kus tuleb muuta vaikimisi kuulatav port 80 meile vajalikuks port 8080 peale. Seda saab teha manuaalselt tekstiredaktoriga, kuid kui on vaja mitu faili muuta siis on mõtekas kasutusele võtta käsurea utiliit sed
cd /etc/apache2/sites-available sed 's/:80/:8080/' 000-default.conf -i
Paigaldame apachele lisamooduli, et kuvataks kliendi õige ip aadress.
apt-get install libapache2-mod-rpaf
Varnish Cache Paigaldus
Õpetame apt utiliiti kasutama https teekondi
apt-get install apt-transport-https
Lisame Varnish Cache repositooriumi krüptovõtme
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
Lisame Varnish Cache repositooriumi Ubuntu 14.04 Trusty Tahr jaoks oma apt utiliidi allikate loendisse
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list
Uuendame repositooriumi ja paigaldame Varnish Cache
apt-get update && apt-get install varnish
Varnishi konfiguratsiooni muutmine
Muudame Varnishi konfiguratsiooni faili /etc/default/varnish
, et Varnish kuulaks vaikimisi port 80 ja muudame reeglite faili asukohta.
DAEMON_OPTS="-a :80 \ -T localhost:6082 \ -f /etc/varnish/meieleht.vcl \ -S /etc/varnish/secret \ -s malloc,256m"
Kopeerime vcl struktuuri vaikefailist default.vcl
uude faili meieleht.vcl
.
cp /etc/varnish/default.vcl /etc/varnish/meieleht.vcl
Täiendame faili meieleht.vcl
.
sub vcl_recv { # Add a unique header containing the client address. unset req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip; # Added security, the "w00tw00t" attacks are pretty annoying so let's block # it before it reaches our webserver. if (req.url ~ "^/w00tw00t") { return (synth(403, "Not permitted")); } } sub vcl_backend_response { # Remove the X-Forwarded-For header if it exists. unset bereq.http.X-Forwarded-For; # Insert the client IP address as X-Forwarded-For. # This is the normal IP address of the user. set bereq.http.X-Forwarded-For = bereq.http.rlnclientipaddr; # Deliver the content return (deliver); } sub vcl_deliver { # We'll be hiding some headers added by Varnish. We want to make sure people # are not seeing that we are using Varnish. # Since we're not caching (yet), why bother telling people we are using it? unset resp.http.X-Varnish; unset resp.http.Via; unset resp.http.Age; # We'd like to hide the X-Powered-By headers. Nobody has to know we can run # PHP and have version XYZ of it. unset resp.http.X-Powered-By; }
Deemonite restart
Kõigepealt tuleb apache teenusele restart teha.
service apache2 restart
Kontrollime IP porti.
netstat -lp | grep apache2
Tulemus peab olema taoline:
tcp 0 0 localhost:8080 *:* LISTEN 4586/apache2
Teeme restarti Varnishile
service varnish restart
Kontrollime uuesti
netstat -lp | grep varnish
Tulemus peab olema taoline:
tcp 0 0 *:www *:* LISTEN 4498/varnishd tcp6 0 0 [::]:www [::]:* LISTEN 4498/varnishd
Nüüd on Varnish paigaldatud Apache2 ette ja sait peab nüüd töötama. Kui Apach2e peatada kuvatakse Varnish error lehekülg.
Logimine
Veebilehe külastamisi saab jälgida /var/log/varnish/access.log
logi failist.
Apache logides serveri aadressi asemel kliendi aadress
Varnishi pool
Lisada oma Varnish konfiguratsiooni .vcl read:
Näiteks /etc/varnish/meieleht.vcl
sub vcl_recv { # Add a unique header containing the client address unset req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip; # [...] }
Taaskäivita Varnish teenus.
service varnish restart
Apache pool
Lisada vajalikud moodulid Apache jaoks
Tuleb luua fail /etc/apache2/conf.d/varnishlog.conf
järgneva sisuga:
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
Enda virtualhost konfiguratsioonis muutke log vorming varnishcombined-ks
<VirtualHost *:80> ServerName www.planet.zz # [...] CustomLog ${APACHE_LOG_DIR}/access.log varnishcombined # [...] </VirtualHost>
Ja siis tuleb Apache2 teenus taaskäivitada.
service apache2 restart
Tulemuse kontroll
Ühenda kliendiga veebiserveri külge ja vaata Apache2 access.log
faili, mis ip logitakse.
tail /var/log/apache2/access.log
Security.VCL paigaldamine
Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles. Sarnaneb mod_securityle, aga on palju kiirem. Esimese sammuna tuleks paigaldada vajalikud utiliidid:
apt-get install git make
Siis tuleks kloonida giti repositooriumis olev algmaterjal:
git clone https://github.com/comotion/security.vcl.git
Järgmiste sammudena on vaja repositooriumis olev rakendus paigaldada ja luua sümboolne link Varnishi konfiguratsiooni kausta:
cd security.vcl/vcl/ sudo make cd .. sudo ln -s $PWD/vcl/ /etc/varnish/security
Lisa Varnishi .vcl conf faili järgnev rida backend default
koodiploki alla:
include "/etc/varnish/security/main.vcl";
Välja peaks nägema nii:
backend default { .host = "127.0.0.1"; .port = "8080"; } include "/etc/varnish/security/main.vcl";
Taaskäivita Varnishi teenus.
service varnish restart
Tulemuse kontroll
Proovi nüüd minna enda veebiserveri külge aadressiga:
http://<sinu serveri ip>/javascript:
Kui kõik toimib tuleb vastuseks:
Error 403 Naughty, not nice!