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…
Obsah článku
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 vytvoriť pravidlá na 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!