přejít na obsah přejít na navigaci

Linux E X P R E S, Jak nakonfigurovat server na NVA (nginx, Varnish, Apache) architektuře pro WordPress

Jak nakonfigurovat server na NVA (nginx, Varnish, Apache) architektuře pro WordPress

wordpress_1.png

Plánujete rozsáhlejší WordPress projekt? Nevíte, kde sehnat kvalitní hosting? Co takto si nakonfigurovat vlastní, na NVA architektuře. NVA značí použití tří hlavních nástrojů - nginx jako vstupní vrstva, Varnish pro cachování a Apache2 pro dynamické generování obsahu.


Pojďme si, v tomto článku, přiblížit základy takového nastavení serveru. Bude se jednat o základní funkční nastavení pro mírně pokročilého správce sítě a trochu té vlastní invence může pak už každý přidat sám.

Trochu teorie

V článku nebudou vysvětlovány základy nastavení jednotlivých služeb, takových návodů je na internetu spoustu. Spíše se zaměříme na myšlenku využití těchto tří nástrojů dohromady a vytvoření tak svižného cachovaného prostředí.

HTTP request

V následujícím diagramu je popsána základní myšlenka cachování pomocí nginx, Varnish a Apache pro WordPress webové stránky. Pojďme si projít proces krok po kroku.

nginx-schema.png

Bod 1

Server dostane požadavek a jako první do cesty mu naběhne nginx, který rozhodne, co se s požadavkem udělá. Toto rozhodnutí závisí převážně na hodnotách COOKIE, které request obsahuje nebo na základě cesty. Pokud se nginx rozhodně, že by se měla odpověď serveru nacházet v cachové vrstvě, postoupí se k bodu 2, dotáže se tedy Varnish cache. Pokud se jedná např. o přihlášeného uživatele, člověka, který má v košíku zboží (které je uloženo v cookie), je potřeba stránku dynamicky vygenerovat pomocí webového serveru apache a postoupí se na bod 4.

Bod 2

Do cachovací vrstvy se odešlou data. Varnish pak už podle hashe (klíče) vyhledá daný požadavek ve své paměti. Pokud jej najde, ihned vrací odpověď do nginxu (bod 6). Pokud v paměti nic nenajde, postupuje se na bod 3, čímž je dotaz na server apache.

Bod 3

Dotaz na server apache, kde se vygeneruje obsah stránky. Konfigurace tohoto serveru může být prakticky totožná s jakýmkoliv standardním bezpečným nastavením.

Bod 4

Pokud nginx uzná, že by dotaz neměl být cachovaný, přeskočí se cache a jde se přímo na dynamické generování obsahu.

Bod 5

Apache vrací vygenerované HTML stránky do Varnish. Ten si jej na základě hlavičky “cache-control” na určitou dobu uloží do paměti pro další využití.

Bod 6

Varnish vrací odpověď na nginx.

Bod 7

Váže se k bodu 4, kdy nginx ihned přejde na generování obsahu a přeskakuje cachovací vrstvu. Tato odpověď je zpátky poslána nginxu.

Bod 8

Uživatel dostává zpět vygenerovaný HTML kód a HTTP odpověď serveru.

Obrázky a jiné statické soubory

Statické soubory, jako jsou obrázky, pdf, zipy a podobné by neměly procházet Varnish cachováním, jelikož se jedná o větší soubory, které by cachováním zabíraly místo na serveru a cachovat je ani není třeba. Také nemá smysl tyto dotazy posílat na apache, protože ten by je vrátil v nezměněné podobě zpět do nginxu a prodloužil by tak o pár milisekund odezvu. Nejjednodušší a nejefektivnější volba je tedy nechat statické soubory zpracovávat právě nginx. Ve vzorovém příkladu nastavení virtual hostu níže v textu je toto nastavení uvedené.

SSL certifikáty

Nejefektivnější volbou pro nakonfigurování SSL je opět již zmíněný “švýcarák” nginx. Zde stačí nakonfigurovat dva virtuální hosty, s čímž jeden bude obsahovat SSL certifikát (klidně Let’s Encrypt) a bude naslouchat na portu 443. Druhý virtuální host bude naslouchat na portu 80 a přesměrovávat dotazy přes stavový řádek 301 na SSL zabezpečení.

Pojďme to nastavit ...

Pojďme si projít všechny služby tak, abyste dokázali nastavit funkční setup. Veškeré nastavení popsané je otestované na Ubuntu 16 LTS. Ostatní linuxové OS budou mít podobné nastavení.

Apache

Nejdříve nainstalujeme Apache službu. Příkazem:

apt-get -y install apache2

Dále je potřeba nainstalovat rpaf pro posílání reálné IP adresy:

apt-get -y install libapache2-mod-rpaf

A povolit některé apache moduly:

a2enmod rewrite
a2enmod expires
a2enmod deflate
a2enmod headers
a2enmod rpaf

Defaultně Apache naslouchá na portu 80, tam chceme ale mít nginx. Musíme tedy v příkazové řádce spustit tento příkaz pro změnu portu na 8080:

sed -i "s/Listen 80/Listen 8080/g" /etc/apache2/ports.conf

Nastavený Apache virtual host může mít PHP nakonfigurován přes php-fpm nebo přes php modul přímo v Apachi, který je jednodušší na nakonfigurování, nicméně je méně variabilní.

Takové nejjednodušší nastavení by mohlo vypadat takto:

<script src="https://gist.github.com/glosjakub/ea0494a673efcc097efac1e18d14a7cd.js"></script>

Varnish

Varnish nainstalujeme příkazem:

apt-get -y install varnish

A následně upravíme /etc/varnish/default.vcl, aby vypadal takto:

<script src="https://gist.github.com/glosjakub/46a815430d7ded3295b7fc33eee5b825.js"></script>

Veškeré podrobné popisy k jednotlivým funkcím najdete přímo v kódu. Je třeba zmínit, že skript ignoruje utm parametry, respektuje no-cache header, dovoluje PURGE pouze ze stejného serveru a je možné vymazat cache jak pro doménu, tak i pro individuální stránku.

Nginx

V první linii však musíme správně nastavit nginx. Nainstalujeme ho příkazem:

apt-get -y install nginx

Podle mnoha návodů na internetu (i jednoho v dalších zdrojích) nastavte workery, gzip a další věci spojené s nginx serverem, případně nechte defaultní hodnoty.

Následně vytvoříme soubor /etc/nginx/conf.d/custom.conf a přidáme následující řádky. Tím definujeme porty, na kterých budou služby naslouchat. Konkrétně 8080 pro Apache a defaultní 6081 pro Varnish.

<script src="https://gist.github.com/glosjakub/eb6519c177453d634c15e26d2f879192.js"></script>

Nastavení jednoho virtuálního hostu pak může vypadat následovně.

<script src="https://gist.github.com/glosjakub/92837abd4318d8845cb0b42ac3315d1e.js"></script>

Opět je v textu gistu popsáno, co dané příkazy dělají. Velice zkráceně - v první části se nastavují obecná pravidla jako je název domény, rootová složka, různé headery, dále se kontrolují cesty, cookie a přípony souborů a podle toho se směřují požadavky na různé služby.

WordPress

Aby byl zajištěn aktuální obsah na webu, je potřeba na server posílat PURGE dotazy k pročištění cache. Pro to jsme pro vás napsali php třídu, kterou můžete libovolně umístit buď do své WordPress šablony, nebo z ní udělat plugin. Skript odchytává různé akce WordPressu a posílá buď dotaz na vyčištění specifické stránky, nebo celé domény.

<script src="https://gist.github.com/glosjakub/c4e9d875912633b8caf2cc3aa87f9719.js"></script>

Případně existuje několik pluginů v repozitáři, které jdou využít. Je jím Varnish HTTP Purge, Purge Varnish Cache. Ten náš je ale osvědčený a velice jednoduchý. :)

Firmy poskytující toto řešení

Zahraniční firma, která je postavena na tomto řešení je jedna z největších společností hostujících WordPress weby - je jím WP Engine (https://wpengine.com/). Ti používají tento systém na celé své infrastruktuře. Samozřejmě okořeněné o mnohé bezpečnostní prvky a vychytávky. Cena hostingu je však poměrně astronomická. V českém prostředí pak můžeme najít dostupnějšího obdobného poskytovatele WP Neuron (https://wpneuron.com/cs/), který taktéž funguje na stejném principu.

Závěrem

Jak bylo v úvodu zmíněno, veškeré informace v tomto článku jsou určené pro mírně pokročilého správce sítě. Je potřeba do nich přidat trochu svých nápadů, vylepšení a můžete nastavit poměrně kvalitní hostingové prostředí. Není zmíněno nastavení php-fpm a MySQL, to by ale vydalo na celý další článek.

Pokud budete chtít získat více informací o webhostingových službách, můžete se podívat na webhosting srovnávač.

Nahoru

Odkazy

Příspěvky

Dobrá rada
Radim D. 11. 10. 2018, 15:36:47
Odpovědět  Odkaz 
Pokud chcete, aby se javascripty, které mají generovat konfigurační soubory / zdrojové texty doopravdy spustili, nenahrazujte znaky < > jejich HTML ekvivalenty. Takhle místo výsledku čtenáři vidí HTML elemnt script.
:-)
I když pravda, mírně pokročilý správce, pro kterého je článek určen, by měl být schopen si spustit JS, když na něj má odkaz.
:-)
Martin Vancl Jak nakonfigurovat server na NVA (nginx, Varnish, Apache) architektuře pro WordPress
tuxmartin 11. 10. 2018, 22:47:08
Odpovědět  Odkaz 
Nedocetl jsem to cele, ale na co je na serveru Apache?

Staram se o 25 serveru, kde bezi nekolik tisic webhostingu WordPressu a vsechny bezi primo na nginx bez jedineho problemu.

Pokud neni vyzadovano .htaccess, nebo neco podobneho, nevidim zadny duvod pro apache.
Jakub Glos Re: Jak nakonfigurovat server na NVA (nginx, Varnish, Apache) architektuře pro WordPress
Jakub Glos 12. 10. 2018, 12:20:38
Odpovědět  Odkaz 
Server apache je tam opravdu primárně kvůli .htaccess, které WP weby poměrně často využívají k různým funkcím. Celá tato struktura je udělána tak, aby web byl na cachovaném prostředí, přitom neztratil výhodu htaccessu.
Jak nakonfigurovat server na NVA (nginx, Varnish, Apache) architektuře pro WordPress
W 26. 10. 2018, 10:17:36
Odpovědět  Odkaz 
Škoda, že není popsáno jak to doladit i se skoro povinným https... To bude asi jen navenek přes https na nginx, a za nginx varnish s wordpressem na httpd(apache) nešifrovaně ?

Bude další díl ?
Martin Vancl Re: Jak nakonfigurovat server na NVA (nginx, Varnish, Apache) architektuře pro WordPress
tuxmartin 26. 10. 2018, 11:29:58
Odpovědět  Odkaz 
Osobne bych delal SSL terminaci na nginx.
Jak nakonfigurovat server na NVA (nginx, Varnish, Apache) architektuře pro WordPress
jouda 18. 12. 2018, 11:02:39
Odpovědět  Odkaz 
Otázka je, kdy používat vůbec Varnish. Třeba pro eshop to smysl asi nemá. Tam se stránky mění v závislosti na přihlášení/cookies/navštívených produktech. Cachovat statické věci (obrázky, js, css) nemá smysl vůbec, to už dělá sám OS (linux tedy určitě). Zřejmě to bude dobré na zpravodajské weby, ale i tam už je často dynamický obsah, takže smysl?

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz