Zgodnie z zapowiedziami w części pierwszej i części drugiej serii, dzisiaj poruszę temat instalacji i konfiguracji alternatywnego serwera HTTP — nginx. Dlaczego akurat tego? Ano, głównie przez wzgląd na jego lekkość i prędkość działania, a także prostotę konfiguracji.
Przy okazji, nie wykluczam wpisów aneksowych, w których poruszę parę dodatkowych kwestii, jak np. serwer VCS git obok serwera HTTP (na przykładzie nginx), instalacja, konfiguracja i użytkowanie narzędzi do monitorowania typu nmon i/lub icinga (dawniej nagios) etc.
Instalacja serwera HTTP nginx oraz PHP5
Polecam instalację pakietu nginx-full, który dostarcza wiele przydatnych modułów. Tym, którzy wolą jednak zachować umiar, zwracam uwagę na pakiet nginx-light. Standardowym meta-pakietem jest po prostu nginx.
Użytkownikom stabilnej gałęzi polecam nieoficjalne repozytorium Dotdeb — można tam znaleźć wiele dużo aktualniejszych wersji oprogramowania serwerowego.
aptitude install nginx-full php5-cgi spawn-fcgi
Dobrym pomysłem jest instalacja pakietu php5 (nie podałem go wyżej, bo taki sposób instalacji opisałem w poprzedniej części serii).
Ponieważ można sprawić, żeby PHP5 w Nginksie pracowało przez FastCGI, instalowany jest pakiet spawn-fcgi.
Jeśli ktoś potrzebuje przykładowych plików konfiguracyjnych, to rezydują one w /usr/share/doc/nginx-doc/examples po zainstalowaniu pakietu nginx-doc.
OK, pora wystartować serwer, żeby sprawdzić, czy w ogóle działa:
/etc/init.d/nginx start
Jeśli wszystko przebiegło pomyślnie, to po wpisaniu localhost/127.0.0.1 w pasku adresu przeglądarki internetowej, powinien pojawić się komunikat „It works” albo coś w tym stylu.
Konfiguracja FastCGI
Po zainstalowaniu pakietu spawn-fcgi dobrym pomysłem jest odpalenie go na próbę:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
Jeśli pojawił się komunikat zbliżony treścią do tego:
OUTPUT:
spawn-fcgi: child spawned successfully: PID: 5144
To znak, że wszystko jest w porządku. Sam proces można zostawić w spokoju, nie trzeba go ubijać do dalszej konfiguracji, która, de facto, sprowadza się do dodania powyższej linii do pliku /etc/rc.local — oczywiście po to, by proces startował automatycznie po ew. restarcie systemu.
vi /etc/rc.local
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
Ważnym jest, by na samym końcu pliku znajdowała się linia exit 0, więc powyższy wpis należy dodać gdzieś przed nią.
Pozostało już tylko odkomentować linię cgi.fix_pathinfo = 1 w pliku /etc/php5/cgi/php.ini:
vi /etc/php5/cgi/php.ini
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting; of zero causes PHP to behave as before. Default is 1. You should fix your scripts; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.; http://php.net/cgi.fix-pathinfocgi.fix_pathinfo=1
Konfiguracja Nginksa
Plik konfiguracyjny Nginksa znajduje się w /etc/nginx/nginx.conf. Osobiście zmieniłem tam tylko dwie linie:
worker_processes 2;
keepalive_timeout 2;
Gdzieś wyczytałem, że worker_processes
== liczba procesorów/core’ów w komputerze, więc, jako że mój posiada dwa rdzenie, ustawiłem 2. keepalive_timeout
mam nadzieję wyjaśniać nie trzeba.
Ostatnia część konfiguracji, to wskazanie Nginksowi skąd ma pobierać strony do wyświetlenia etc. Domyślnie każdy vhost
może sobie rezydować w osobnym pliku, który należy umiejscowić w katalogu /etc/nginx/sites-available. Każdy vhost
, który ma być aktywny, trzeba dowiązać symbolicznie do /etc/nignx/sites-enabled. Domyślnie w sites-available znajduje się plik default, a w sites-enabled znajduje się dowiązanie do niego. Jeśli planowany jest tylko jeden vhost
, nie głupim pomysłem jest wyedotowanie pliku default do własnych potrzeb. Ostatecznie i tak następny vhost można po prostu sobie utworzyć na nowo w osobnym pliku.
Jako że lubię trzymać public_html
w katalogu domowym, moja konfiguracja przedstawia się następująco (jest tu też zawarty wpis konfigurujący wsparcie dla PHP5 via FastCGI w Nginksie):
# vi /etc/nginx/sites-available/default
server {
listen 80;
root /home/hadret/public_html;
index index.html index.htm index.php;
server_name localhost;
location / {
try_files $uri $uri/ /index.html;
autoindex on;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/hadret/public_html$fastcgi_script_name;
include fastcgi_params;
}
}
Pozwoliłem sobie zostawić tylko te relewantne fragmenty pliku. Myślę, że struktura pliku jest na tyle prosta, że nie trzeba niczego wyjaśniać. Jeśli jednak trzeba — zapraszam do sekcji komentarzy (:
Podsumowanie
W ten sposób dobiegła trzecia i ostatnia część serii Serwer Debian GNU/Linux na łączu DialNet. Jak wspomniałem na wstępie, tego typu tematyka z całą pewnością będzie się jeszcze przewijała przez bloga. Temat monitorowania serwera pozostaje otwarty, na pewno napomknę też o przydatnych konsolowych programach, które ułatwiają i często przy okazji umilają korzystanie z „gołej” konsoli.