Kategória: Linux a sieť

Zmenené: 12. október 2010

Nahraďte LAMP pomocou LEMP

Skratka LAMP je iste mnohým známa a označuje Linux a svätú trojicu (Apache, MySQL a PHP). Skratka LEMP už až taká známa nie je, ale označuje vlastne obdobnú kombináciu, len Apache je nahradený serverom Nginx. Ak sa pýtate prečo je teda v skratke E a nie N, tak je to preto, aby sa skrátka lepšie vyslovovala. Alebo preto, že meno Nginx je vlastne skrátené Engine X, a už je E na svete…

Už som to tu kdesi písal. Keď čítam návody na webový server, skoro všetky sa týkajú servera Apache. Je síce faktom, že taký Apache má na svedomí obsluhu skoro 70% domén sveta, ale faktom je i to, že často je jeho použitie podobné tomu klasickému kanónu a vrabcom. Už dlhú dobu sa chystám vymeniť Apache za niečo oveľa ľahšie, robil som i nejaké pokusy s Lighty, ale nakoniec vždy zvíťazila moja lenivosť. Až do minulého týždňa, keď som sa rozhodol pozrieť čo je nového na poli webových serverov.

Zistil som, že počet alternatív utešene rastie a, z tých čo ma zaujali, je tu na výber už spomínaný Lighty, Cherokee a nakoniec Nginx. Teda, aby som bol presný, domovská stránka Nginx je na adrese http://sysoev.ru/nginx/, ale spomenutá Wiki stránka je podľa mňa oveľa užitočnejšia. Lighty som preskočil, pretože ho poznám a zameral som sa na ďalšie dva. Cherokee ma oslovil hneď, ale keď som sa zahĺbal do popisu konfigurácie, tak som zistil, že má na nastavenie pripravené perfektné klikacie rozhranie a teda jeho cieľová skupina bude trochu mimo mňa. Určite to nie je jeho chyba, len moje rozhodnutie, a vrelo ho odporúčam vyskúšať v situáciách keď sa chcete dostať rýchlo k hmatateľnému výsledku s minimálnym úsilím. Ja si na minimálne úsilie nepotrpím, pretože rád preskúmavam veci do hĺbky podstaty a často sa pri tom i niečo nové naučím.

Webový server Nginx

Tento server nie je podľa mňa ničím výrazne lepší ako ostatné, proste ma zaujal. Je to ľahký webový server, ktorý má svoj pôvod v Rusku, niekedy v roku 2002 a jeho prvé oficiálne zverejnenie nastalo v roku 2004. Je to teda relatívne mladý projekt, ktorý však už má podiel 4,7% obchodných stránok (Apríl 2010). Je to multiplatformný server, ktorý bol testovaný na systémoch FreeBSD, Linux, Solaris, MacOS X i Windows (XP a 2003).

Nginx poskytuje:

  • obsluhu statických súborov a i autoindexovanie;
  • akcelerovaný kešovací reverzný proxy server (vrátane vyrovnávanie záťaže);
  • akcelerovanú podporu kešovania vzdialených FastCGI serverov (vrátane vyrovnávania záťaze);
  • podporu SSL and TLS SNI;
  • virtuálne servery (podľa mena i podľa IP);
  • udržiavanie i zreťazenie spojení;
  • formátovateľný záznam prístupov i chýb;
  • prepisovanie adries;
  • riadenie prístupu na základe IP a autentifikáciu HTTP Basic;
  • streamovanie FLV;
  • obmedzovanie rýchlosti, simultánnych spojení, či požiadaviek z jednej adresy;
  • zahrnutý Perl;
  • a okrem Perlu aj perlička poštový proxy s podporou pre POP, IMAP i SMTP proxy s podporu SSL a autentifikácie.

Čo myslíte, nevyzerajú tie možnosti lákavo? Podľa mňa áno. Skôr alebo neskôr sa iste k mnohým vrátim (asi okrem stremaovania FLV, ktoré ma netrápi), ale v tomto návode sa budem venovať najmä základným možnostiam a technikám ako sprevádzkovať webový server s podporou PHP a MySQL. Myslím, že nebudete potrebovať žiadne špeciálne vedomosti na to, aby ste boli úspešní, ale aspoň základné veci ohľadom sietí a HTTP by ste vedieť mali. V návode nebude ani popis detailného nastavovania PHP ani MySQL, len vecí potrebných k tomu, aby LEMP fungoval.

Inštalácia

Ale dosť bolo rečí, poďme na vec!V prvom kroku nainštalujem nginx server spolu so serverom mysql:

aptitude install nginx mysql-server

K tomu nie je viac čo dodať, možno len to, že počas inštalácie mysql som bol vyzvaný na zadanie administrátorského hesla k systému MySQL. Inštalácia by mala prebehnúť bez problémov, hlavne čo sa týka MySQL. Na rozdiel do MySQL, ktorý sa po inštalácii aj spustil, sa mi Nginx po nainštalovaní nespustil, po chvíľke pátrania som sa dostal k dôvodu v súbore /var/log/nginx/error.log :

2010/05/12 22:05:08 [emerg] 925#0: socket() [::]:80 failed (97: Address family not supported by protocol)

Mám totiž v jadre vypnutú podporu IPv6, na čo zjavne Nginx pripravený nie je… Teda, aby som bol rpesný, on na to pripravený je, len jeho východzia konfigurácia nie, takže malá úprava v súbore /etc/nginx/sites-enabled/default, kde treba zakomentovať riadok:

listen [::]:80 default ipv6only=on; ## listen for ipv6

Po tejto zmene možno server spustiť:

invoke-rc.d nginx start

Pre overenie, že web server naozaj beží poslúži program netstat :

netstat -tunlp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1654/nginx

Teraz si ho môžte vyskúšať zadaním mena servera (alebo jeho IP adresy) do adresového riadku svojho webového prehliadača. Ak sa Vám zobrazí chybové hlásenie “ 404 Not Found „, tak vidíte prvý výsledok svojho snaženia. Server Nginx vo svojom inštalačnom balíku nemá žiadnu uvítaciu stránku, ale to teraz nie je dôležité. Ak Vám to nestačí, prekopírujte si do adresára /var/www/nginx-default/ nejaký súbor s HTML stránkou, nazvite ho index.html a výsledok bude hneď lepší.

Konfigurácia

Trochu som sa už o konfigurácii zmienil vyššie, teraz sa však na ňu pozriem podrobnejšie. Konfigurácia je predvolene umiestnené v adresári /etc/nginx/ v súbore nginx.conf, teda aspoň v Debiane. Ak nepoužívate Debian a chcete vedieť kde hľadať konfiguráciu, spustite si výpis parametrov použitých pri konfigurácii kompilácie pomocou nginx -V. Spustenie servera s týmto parametrom vypíše okrem verzie servera aj konfiguračné argumenty a medzi nimi je i predvolená cesta konfiguračného súboru --conf-path=/etc/nginx/nginx.conf.

V tomto súbore toho veľa nie je, ale sú to tie základné nutnosti, takže sa pozrime na niektoré z nich. Na začiatku súboru je:

user www-data;
worker_processes 1;

Prvá voľba udáva, že server je spúšťaný s právami používateľa www-data a druhá udáva počet spúšťaných procesov. Keďže jeden proces je predvolená hodnota, je táto voľba vlastne zbytočná, ale je dobré o nej vedieť. Povolením viacerých procesov totižto môžete využiť výkon viacerých jadier (procesorov), znížiť čas čakania na diskové operácie a tiež tak môžete znížiť počet spojení na jeden proces (voľba worker_connections ). Za týmito dvomi voľbami nasleduje znova opakovanie predkompilovaných hodnôt pre umiestnenie súboru so záznamom chýb a súboru s identifikátorom procesu (PID).

Potom nasledujú nastavenia modulu Events, ktorý riadi spojenia server. V tomto prípade je nastavený počet spojení na jeden proces. V prípade, že máte nastavené viac ako jeden proces, stáva sa zaujímavou aj voľba multi_accept, ktorá udáva akým spôsobom (resp. kedy) sú vytvárané nové procesy. Ak je táto voľba zapnutá (on), je nový proces vytvorený až po dosiahnutí worker_connections spojení. Ako ste si určite všimli, nastavenia modulu tvoria sekciu, ktorá je uzatvorená do zložených zátvoriek, ktorým predchádza meno modulu, čo je v tomto prípade events.

Sekcia http {…} nastavuje základné vlastnosti spracovania HTTP. Nastavenia v tejto sekcii začínajú zahrnutím definície typov MIME pomocou direktívy include. Nasleduje nastavenie cesty k súboru so záznamom prístupov k serveru a povolenie posielania súborov. Nasledujú nastavenia parametrov TCP a zapnutie zabudovanej podpory komprimácie gzip. Dúfam, že pri čítaní predchádzajúcich riadkov si pozeráte svoj konfiguračný súbor.

Na konci sekcie sú (podobne ako v Apache) dve direktívy include :

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Prvý include sa stará o načítanie konfiguračných súborov z adresára /etc/nginx/conf.d (mená súborov musia sa končiť na .conf ). Takto teda možno svoju konfiguráciu pekne rozdeliť do malých súborov, každý na jeden účel… Druhý riadok zase vraví to isté, ale je predurčený pre definíciu virtuálnych serverov v adresári /etc/nginx/sites-enabled/. Mená súborov v tomto adresári nemajú obmedzenie a môžu sa volať akokoľvek (najlepšie výstižne). Aby som bol úplne presný, konfiguráciu virtuálnych serverov je vhodné umiestňovať do adresára /etc/nginx /sites-available a tieto potom odkazovať pomocou symlinkov v spomenutom adresári sites-available.

Keď nazriete do adresárov virtuálnych serverov, zistíte, že po inštalácii je dostupný a povolený jeden virtuálny server, nazvaný default. Podľa môjho názoru je názov default v tomto prípade mätúci, pretože sa nejedná o nejaký predvolený server, ale o nejaký hybrid medzi nastavením servera pre localhost a predvoleným serverom. Preto v ňom urobím isté zmeny tak, aby server pre localhost bol serverom pre lokálne spojenia a predvolený server pre všetky ostatné.

Začnem tým, že súbor default prekopírujem do súboru localhost a upravím ho do tejto podoby:

# /etc/nginx/sites-available/localhost
# virtual host for local connections only

server {
  listen 127.0.0.1:80; ## listen for ipv4
    server_name localhost 127.0.0.1;
    access_log /var/log/nginx/localhost.access.log;

    location / {
        root /var/www;
        index index.html index.htm;
    }

    location /doc {
        root /usr/share;
        autoindex on;
    }

    location /images {
        root /usr/share;
        autoindex on;
    }
}

Tento virtuálny server povolím vytvorením symbolického odkazu:

cd /etc/nginx/sites-ebaled
ln -s ../sites-available/localhost localhost

Po tejto úprave, si upravím aj predvolený virtuálny server (v súbore default ) do takéhoto tvaru:

# statements for each of your virtual hosts

server {
    listen 80 default; ## listen for ipv4
    server_name _;
    server_name_in_redirect off;

    access_log /var/log/nginx/default.access.log;

    root /var/www;

    location / {
        index index.html index.htm;
    }
}

Čo som zmenil? Hlavne som upravil voľby direktívy listen, kde som pridal možnosť default, ktorá udáva, že sa jedná o predvolený sever, teda server, ktorý obslúži požiadavky, ktorým nezodpovedá žiadny iný server. S tým súvisia aj ďalšie dve direktívy. Teda špeciálne meno servera v tvare podtržítka (‚_‘) a voľba server_name_in_redirect, ktorá v stave Off zabraňuje nahradeniu zadaného doménového mena tým, z direktívy server_name. Nastavil som aj koreňový adresár servera:

root /var/www;

Vymazal som odkazy na lokálne adresáre doc a images, pretože nepovažujem za vhodné aby bol lokálny súborový systém prístupný aj zo siete. Po uložení zmien si môžem overiť správnosť konfigurácie, spustením nginx -t, prípadne pomocou trochu neštandardnej, ale zato milej, voľby:

invoke-rc.d nginx configtest

To, že mi kontrola neohlási žiadnu chybu síce ešte neznamená, že moja konfigurácia bude i pracovať, ale bezchybná syntax je nutnou podmienkou. Ak je teda konfigurácia bez chýb, môžem server reštartovať, alebo ešte lepšie, znovu načítať konfiguráciu, pomocou:

invoke-rc.d nginx reload

A teraz môžem z lokálneho počítača pristupovať k serveru, ako i k dokumentácii (v http://localhost/doc), či obrázkom ( http://localhost/images). Iste ste si všimli, že som pre localhost nenastavil žiadne riadenie prístupu, ale vzhľadom k tomu, že tento virtuálny server reaguje len na lokálne požiadavky, považujem to za zbytočné…

Pri prístupe k serveru z iného stroja (alebo proste cez adresu inú ako localhost) mi bude poskytnutý predvolený server, ktorý zatiaľ neposkytuje nič, len zobrazenie východzej stránky (ak ste si ju v adresári /var/www/ vytvorili). Východzia stránka sa podľa štandardu má volať index.html alebo index.htm.

PHP FastCGGI

Takže teraz mi už server beží, zatiaľ však dokáže obsluhovať len statický obsah, čo v dnešnej dobe bude stačiť asi málokomu, preto si nastavím podporu spracovania dynamických stránok, konkrétne podporu PHP. Začnem inštaláciou potrebných balíkov. Najprv celkom minimálna inštalácia:

aptitude install php5 php5-cgi php5-mysql

Ak si chcete len vyskúšať fungovanie, budú tieto balíky stačiť. Ak chcete vyskúšať aj niečo viac, tak si pridajte aj ďalšie balíky a rozšírenia PHP podľa vlastného výberu, napríklad:

aptitude install php5-curl php5-idn php5-imap php5-gd php5-mcrypt php5-memcache php5-mhash php5-ming \
                 php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl \
                 php5-xcache php-pear

Prípadne aj ďalšie, podľa vlastnej potreby…

Takže PHP máme nainštalované, teraz ho treba sprevádzkovať v Nginx. Keďže Nginx neobsahuje modul pre PHP (ako ho má napríklad Apache), je treba nastaviť spracovanie skriptov PHP prostredníctvom rozhrania FastCGI. FastCGI je spôsob spolupráce webového servera s PHP (alebo aj iným interpretoerom), pri ktorom webový server predáva prichádzajúce požiadavky interpreteru PHP. Pri prijatí požiadavky je vytvorený proces, ktorý však (na rozdiel od klasického CGI) po spracovaní neskončí, ale čaká na ďalšie využitie, čím výrazne znižuje potrebnú réžiu a môže i zvýšiť výkon. Medzi jeho hlavné výhody patrí:

  • Bezpečnosť PHP skript je spúšťaný s právami používateľa, ktorému skript patrí;
  • Stabilita interpreter PHP je úplne nezávislý od behu webového servera;
  • Výkon FastCGI je veľmi rýchle, čiže dokáže;
  • Diverzita FastCGI nie je obmedzené iba na PHP, ale rovnaký princíp možno použiť aj na mnoho iných interpreterov;
  • Rozšíriteľnosť fastCGI rozhranie nemusí bežať na rovnakom stroji ako web server…

Má to však aj svoje nevýhody, a to najmä:

  • Nastavenie zmeny v nastavení sa neprejavia okamžite ako pri CGI, ale je potrebné reštartovať všetky procesy FastCGI.

Nginx síce podporuje FastCGI, ale nedokáže si FastCGI procesy spúšťať sám, je preto potrebné nastaviť spúšťanie interpretera PHP externe. Donedávna (a v mnohých návodoch je to dodnes) sa bolo treba nainštalovať Lighttpd, ktorý obsahuje skript určený práve k obsluhe procesov FastCGI. V súčasnej dobe je tento skript vyčlenený do samostatného balíka (aspoň v Debiane), preto si ho nainštalujem:

aptitude install spawn-fcgi

Po inštalácii máme k dispozícii príslušný skript, ktorý je však nezávislý na interpreteri, takže je potrebné vytvoriť štartovací skript, ktorý sa postará o to, aby sa pri každom štarte spustil práve interpreter PHP. Príklad takého štartovacieho skriptu je k dispozícii vo Wiki Nginx, takže ho stiahnem a uložím do /etc/init.d:

wget "http://wiki.nginx.org/index.php?title=Ubuntu-php-fastcgi&action=raw&file=php-fastcgi" -O php-fastcgi
chmod +x php-fastcgi
mv php-fastcgi /etc/init.d/

Rovnako tak si stiahnem predvolený konfiguračný súbor (pre tento štartovací skript), ktorý presuniem do /etc/default::

wget "http://wiki.nginx.org/index.php?title=Ubuntu-php-fastcgi&action=raw&file=php-fastcgi-default" -O php-fastcgi
mv php-fastcgi /etc/default/

V tomto súbore si môžete prispôsobiť nastavenia, ale myslím, že východzie plne postačia. ostáva už len tento spúšťací skript nainštalovať:

update-rc.d php-fastcgi defaults

No a samozrejme, spustiť ho:

invoke-rc.d php-fastcgi start

Že naše PHP FastCGI beží si možno overiť napríklad opäť pomocou netstat:

netstat -tunlp | grep php-cgi
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3616/php-cgi

Po pripravení PHP do režimu FastCGI ostáva ešte nastaviť Nginx tak, aby dokázal spracovať súbory php a poslať ich interpreteru, k tomu stačí do konfigurácie každého virtuálneho servera, ktorý má spracovávať súbory PHP, pridať do sekcie server {…} novú definíciu location pre súbory .php:

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

V skutočnosti je toho pre správne fungovanie treba nastaviť oveľa viac, ale všetky potrebné parametre už sú pripravené v súbore /etc/nginx/fastcgi_params, stačí len zaistiť aby si ho server načítal pomocou direktívy include. No a to je všetko, teda skoro všetko. Do direktívy index v sekcii location / {…} pridať aj meno index.php, inak by server tieto súbory ako východzie súbory adresárov ignoroval. Pre vyskúšanie teda stačí vytvoriť súbor /var/www/index.php s obsahom:

< ? phpinfo(); ?>

znovu načítať konfiguráciu servera a pozrieť sa v prehliadači na výpis nastavení PHP.

Od verzie PHP 5.4 by mal PHP obsahovať zabudovanú podporu FPM (FastCGI Process management), čím by mala potreba pomocného skriptu odpadnúť.

PHPMyAdmin

Takže teraz mi server beží a dokáže poskytovať ako statické HTML stránky, tak i dynamicky generované PHP stránky. Pre prácu s tabuľkami MySQL je iste veľmi užitočným pomocníkom nástroj PHPMyAdmin, ktorý poskytuje webové rozhranie na správu databázového servera MySQL. Pokiaľ si PHPMyAdmin stiahnete a nainštalujete do adresára webovej stránky, malo by to vlastne fungovať bez nejakých väčších problémov. Vhodnejším spôsobom je však použiť distribučný balík, pretože takto získate možnosť aktualizácií cez svoju distribúciu. Lenže takto nainštalovaný balík nie je nainštalovaný do koreňa nášho servera, ale do adresára /usr/share/phpmyadmin a prichádza s automatickou konfiguráciou webových serverov, ale Nginx medzi nimi nie je.

Preto teraz ukážem čo treba urobiť, aby distribučný PHPMyAdmin a Nginx dokázali pracovať spolu. Začnime inštaláciou:

aptitude install phpmyadmin

Počas inštalácie dostanete niekoľko otázok. Odporúčam zvoliť možnosť nakonfigurovania balíčkovacím systémom. Po potvrdení voľby musíte zadať administrátorské heslo servera MySQL a potom si systém vyžiada heslo k databáze PHPMyAdmin. Tu nemusíte zadávať nič, pretože ak necháte pole prázdne, systém si vygeneruje vlastné heslo. Za normálnych okolností nebudete toto heslo nikdy potrebovať. Po nainštalovaní si vytvorím konfiguračný súbor:

# /etc/nginx/phpmyadmin
# configuration for PHPMyAdmin

location /phpmyadmin {
    root /usr/share;
    index index.php;
}

location ~ ^/phpmyadmin/(.+\.php)$ {
    root /usr/share/phpmyadmin;
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/$1;
}

A tento konfiguračný súbor potom zahrniem do konfigurácie každého virtuálneho servera, ktorý má používať PHPMyAdmin, pridaním direktívy:

include /etc/nginx/phpmyadmin;

Dôležité je vložiť tento riadok pred definíciu location ~ .php$, pretože inak by bola pre PHP súbory použitá práve táto definícia, bez ohľadu na to, že požiadavok smeruje na celkom iné nastavenie. Po znovunačítaní konfigurácie je PHPMyAdmin prístupný prostredníctvom zadania adresy http://meno_servera/phpmyadmin.

Podobným spôsobom môžete nastaviť aj iné aplikácie, ktoré sú umiestnené mimo súborového systému servera.

Joomla

Keď mi server úspešne funguje a obsluhuje ako statické, tak i dynamické PHP stránky, nie je pre úspešné nainštalovanie a používanie redakčného systému Joomla! potrebné nič dopĺňať. Avšak tí, ktorí chcú od svojej Joomly viac ako len to, aby fungovala, iste vedia čo je to prepisovanie adries. Inštalácia Joomla! prichádza s predpripraveným súborom htaccess.txt, ktorý obsahuje pravidlá prepisovania adries pre server Apache. Tieto pravidlá slúžia jednak na obsluhu SEO adries (adresy v čitateľnejšej, a tým aj zapamätateľnejšej, forme, najmä pre vyhľadávače) a jednak slúžia na základnú ochranu redakčného systému pred známymi pokusmi o útok. Avšak v serveri Nginx pravidlá pre Apache nepracujú a je potrebné ich prepísať do podoby, ktorej Nginx rozumie.

Takže najprv SEO, ktorého nastavenie pre Joomlu nainštalovanú v koreni servera je popísané vo wiki Nginx. Ja som si toto nastavenie upravil tak, aby sa vzťahovalo len na Joomlu, ktorá je nainštalovaná v podadresári koreňa webového servera /joomla.

location /joomla {
    # expires 30d;
    index index.php;
    try_files $uri $uri/ @joomla;
}

location @joomla {
    rewrite ^/joomla/(.*)$ /joomla/index.php?q=$1 last;
}

Oproti vyššie spomínanému príkladu v dokumentácii som nahradil presmerovanie chybovej stránky (error_page 404 = @joomla;) direktívou pre testovanie existencie súborov (try_files). S touto zmenou tiež súvisí aj ďalšia, pretože použitím try_files odpadá potreba zakázať zaznamenávanie chýbajúcich súborov (log_not_found), ktoré sa v istých prípadoch môže veľmi zísť. Vzhľadom k umiestneniu Joomla! v podadresári som musel pridať novú sekciu location /joomla {…} a tiež rozšíriť cesty v direktíve rewrite o časť /joomla (dva krát).

V súbislosti s druhou úlohou je potrebné do sekcie location /joomla (prípadne @joomla) pridať ešte niekoľko pravidiel rewrite. Tieto som však nevytvoril sám, ale použil som konverzný nástroj na www.anilcetin.com. Výsledkom konverzie sú tieto pravidlá:

if ($args ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") {
    set $rule_0 1;
    return 403;
    break;
}
if ($args ~ "base64_encode.*\(.*\)") {
    set $rule_0 1;
    return 403;
    break;
}
if ($args ~* "(\<|%3C).*script.*(\>|%3E)") {
    set $rule_0 1;
    return 403;
    break;
}
if ($args ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") {
    set $rule_0 1;
    return 403;
    break;
}
if ($args ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") {
    set $rule_0 1;
    return 403;
    break;
}

Ostáva už len spomenúť, že takto nastavené pravidlá teda nie len chránia pred známymi exploitmi, ale teraz môžete v administrácii Joomly pokojne zapnúť všetky direktívy, ktoré sa týkajú SEO (aj tú, ktorá upozorňuje, že je len pre Apache).

Záver

Čo napísať na záver? Tento serverík ma svojimi možnosťami (i logom s hviezdou) oslovil. Jeho konfigurácia síce nie je celkom triviálna a miestami ani intuitívna. Každopádne však je dostatočne rozsiahla a prispôsobivá. Potešilo ma najmä, že nie je problém problém vytvoriť pravidlá pre prepisovanie adries pre Joomla! (s Lighty sa mi to nepodarilo), a tak už nemusím do svojich virtuálnych strojov inštalovať Apache. A hneď ako overím ako je na tom s Perlom (jedna aplikácia v práci ho vyžaduje) ho nasadím i v práci. Ak Vás zaujíma porovnanie Apache a Nginx, pozrite si tento test. A ak ste sa náhodou v tom pridávaní konfiguračných volieb stratili, tu je výsledný konfiguračný súbor predvoleného virtuálneho servera:

server {
        listen                   80 default; ## listen for ipv4
#        listen                   [::]:80 default ipv6only=on; ## listen for ipv6
        server_name              _;
        server_name_in_redirect  off;
        access_log               /var/log/nginx/default.access.log;

        root             /var/www;

        location / {
                index            index.html index.htm index.php;
        }

        location /joomla {
#                expires            30d;
                index              index.php;
                try_files          $uri $uri/ @joomla;
        }

        location @joomla {
                if ($args ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") {
                            set $rule_0 1;
                            return 403;
                            break;
                }
                    if ($args ~ "base64_encode.*\(.*\)") {
                            set $rule_0 1;
                            return 403;
                            break;
                }
                if ($args ~* "(\<|%3C).*script.*(\>|%3E)") {
                            set $rule_0 1;
                            return 403;
                            break;
                }
                if ($args ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") {
                            set $rule_0 1;
                            return 403;
                            break;
                }
                if ($args ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") {
                            set $rule_0 1;
                            return 403;
                            break;
                }
                rewrite            ^/joomla/(.*)$ /joomla/index.php?q=$1 last;
        }

        # PHPMyAdmin
        include                    /etc/nginx/phpmyadmin;

        location ~ \.php$ {
                include /etc/nginx/fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

Veľa radosti z nového webového servera!