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.

Źródła