Nginx a PHP vo Wheeze
Už je to nejaký čas, čo som tu zverejnil postup ako nastaviť odľahčený webový server Nginx. Priznám sa, že som ho nepoužíval, ale vyvstala mi potreba použiť zase niečo ľahké, tak som sa znova rozhodol pre tento server a neoľutoval som.
Obsah článku
Tip
V popise predpokladám, že server Nginx je už nainštalovaný a obsluhuje statické stránky. Vzhľadom na to, že toto mi fungovalo hneď po inštalácii, ani sa tým zaoberať nebudem.
Inštalácia PHP
Inštalácia sa skladá z dvoch krokov, najprv potrebné minimum:
aptitude install php5-cli php5-common php5-suhosin php5-fpm php5-cgi
Pravdepodobne budete potrebovať (chcieť) aj ďalšie moduly PHP, v závislosti na tom, čo chcete používať (curl, mcrypt, ldap, snmpa podobne), takže si nainštalujte, čo potrebujete. Môžete skúsiť túto sadu balíkov:
aptitude install php-apc php-auth php-net-smtp php-net-socket php-pear php5-adodb \
php5-curl php5-gd php5-imagick php5-imap php5-ldap php5-mcrypt \
php5-mysql php5-pspell php5-sqlite php5-xmlrpc php5-xsl
Tento zoznam balíkov nie je žiadna dogma, ani odporúčanie, je to len príklad.
Nastavenie PHP5 FPM
FPM je skratka, ktorá označuje Fast Process Manager a slúži ako démon,
ktorý obsluhuje požiadavky FastCGI. V Debiane je toto riešenie
dostupné v balíku php5-fpm, jeho nastavenie je v adresári
/etc/php5/fpm
a predvolené nastavenie je postačujúce, možno však
budete chcieť nahradiť riadok (/etc/php5/fpm/pool.d/www.conf
):
listen=127.0.0.1:9000
riadkom:
listen=/dev/shm/php-fpm.socket
Táto zmena sa postará o to, že rozhranie FastCGI nebude vytvárať TCP spojenie (na adrese 127.0.01:9000), ale vytvorí unixový soket v zadanom súbore. Podľa toho, ktorý spôsob si vyberiete je potom treba upraviť konfiguráciu Nginx. Po zmene nastavenia ostáva FPM reštartovať:
invoke-rc.d php5-fpm restart
Nastavenie Nginx
V predvolenom stave je server Nginx nastavený na spracovanie
statických stránok HTML. Aby dokázal spracovať aj skripty PHP je
potrebných niekoľko úprav. Najprv nastavenie indexovej stránky, pričom
východzí stav (/etc/nginx/sites-available/default
) vyzerá takto:
server {
index index.html index.htm;
}
Do toho treba pridať aj (alebo len) index.php
, takže výsledok môže
vyzerať takto (mením aj koreňový adresár, pretože predvolený je
/usr/share/nginx/www
):
server {
root /srv/www;
index index.php index.html;
}
Predvolený virtuálny hostiteľ Nginx má konfiguráciu PHP pripravenú, stačí odkomentovať príslušné riadky, ale vzhľadom na to, že som nastavil FPM na unixový soket, je to potrebné v nastavení zmeniť hodnotu direktívy fastcgi_pass. Pridal som tiež zobrazenie štandardnej chybovej stránky v prípade, že požadovaný skript neexistuje:
server {
...
location~ .php$ {
try_files $uri @404;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/dev/shm/php-fpm.socket;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location @404 {
return404;
}
Ostáva server reštartovať:
invoke-rc.d nginx restart
Testovacia stránka
Pre istotu tu ešte uvádzam testovaciu stránku, ktorú si môžete uložiť
do koreňového adresára (tu /srv/www/index.php
):
<?php phpinfo(); ?>
Niekoľko postrehov
Pri pokuse o prístup k neexistujúcim adresárom (i súborom) som v prehliadači dostal chybové hlásenie 500 (interná chyba servera) namiesto správneho 404 (súbor neexistuje). Pri pátraní po príčine som si všimol v zázname riadky:
*1 rewriteor internal redirection cycle while internal redirect to "/kuk", client: 192.168.0.1,
server: localhost, request: "GET /kuk H>P/1.1", host: "bridge.skk"
Po chvíľke pátrania na internete som našiel riešenie a pridal som do konfigurácie novú sekciu:
location/index.html {
rewrite ^ /index.html break;
}
Záver
Od mojich posledných pokusov s webovým serverom Nginx v Debiane urobil správca balíkov veľký pokrok a to, čo poskytuje ako predvolenú konfiguráciu je funkčné riešenie ľahkého webového servera.