Budujeme web server II.

21.02.2011 21:50 | Články | Dare_devil
V minulom dieli sme si predstavili základné rozdiely medzi Lighttpd, Apache a Nginx, predstavili si základné vlastnosti databázových serverov a po zvážení sme si nainštalovali MySQL server a naučili sa naň nastaviť prístupové práva. Tento diel sa bude týkať podrobnej konfigurácie Lighttpd serveru. Ak ste sa rozhodli práve pre Lighttpd, čítajte ďalej.

Light HTTP Server

Jeho inštalácia je veľmi jednoduchá, presne tak, ako bolo sľubované.

Debian:
# aptitute install lighttpd

Arch Linux:
# pacman -S lighttpd

Fedora:
# yum install lighttpd

Jeho beh si následne môžeme overiť:
root@debian:/var/www# netstat -tap | grep lighttpd
tcp        0      0 *:www                   *:*                     LISTEN      3864/lighttpd   
tcp6       0      0 [::]:www                [::]:*                  LISTEN      3864/lighttpd   

Jeho beh si samozrejme môžeme overiť na adrese http://127.0.0.1 resp. jej aliase http://localhost, kde nájdeme index.lighttpd.html

Pribudol nám konfiguračný súbor, ktorý nachádzame /etc/lighttpd/lighttpd.conf na rovnakej adrese vo všetkých troch spomenutých distribúciách.
Koreňový adresár pre umiestnenie súborov dostupných na web serveri nájdeme na adrese:

Debian:
/var/www/

Arch Linux:
/srv/http/

Fedora:
/srv/www/lighttpd/

Pred tým, než začneme Lighttpd konfigurovať, je dobré poznať príkaz
# lighttpd -t -f /etc/lighttpd/lighttpd.conf

Týmto príkazom otestujeme správnosť konfiguračného súboru pred jeho nasadením

Výstup tohoto príkazu je následovný

Správna syntax
root@debian:/var/www# lighttpd -t -f /etc/lighttpd/lighttpd.conf
Syntax OK

“Omylom” pridané písmeno “f” na začiatok tretieho riadku
root@debian:/var/www# lighttpd -t -f /etc/lighttpd/lighttpd.conf
Undefined config variable: var.f
2011-02-17 12:09:57: (configfile.c.912) source: /etc/lighttpd/lighttpd.conf line: 3 pos: 15 parser failed somehow near here: mod_alias


Ďalším nevyhnutným príkazom, ktorý je potrebný pre riadenie Lighttpd serveru je:
# /etc/init.d/lighttpd start|stop|restart


Ďalší krok, ktorý je síce dobrovoľný, no z pohľadu bezpečnosti potrebný, je vytvorenie skupiny “webserver” a pridanie už existujúceho používateľa “webadmin” do tejto skupiny.

To zabezpečíme sériou príkazov:
root@debian:/var/www# groupadd webserver
root@debian:/var/www# usermod -a -G webserver webadmin

A následne overíme priebeh vykonaných akcií:
root@debian:/var/www# id webadmin
uid=1000(webadmin) gid=1000(webadmin)
groups=1000(webadmin),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev),115(powerdev),116(scanner),1001(webserver)


Po tomto kroku ostáva už len jediné, a to koreňovej zložke nastaviť práva:
root@debian:/var/www# chown -R root:webserver /var/www/
root@debian:/var/www# chmod g=rwx -R /var/www/

Ako môžeme vidieť vo výpise, na zložku /var/www ma vlastník, tj. root a skupina webserver práva rwx , ostatní iba r-x
drwxrwxr-x 2 root webserver 4096 Feb 17 12:01 www/

Po najbližšom prihlásení používateľa webadmin má dostupnú zložku /var/www a my môžeme pokračovať ďalej.

CGI
Ďalším krokom je pridanie podpory CGI, ktorá sa nám hodí pri písaní jednoduchých Perl skriptov. Tú vytvoríme pomerne jednoducho.

Do konfiguračného súboru Lighttpd do server.modules pridáme na nový riadok “mod_cgi", čiže v konečnom dôsledku vyzerá nejako takto:
server.modules = (
        "mod_access",
        "mod_cgi",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
)

Ďalším krokom je potrebné pridať na koniec tento riadok:
cgi.assign = ( ".pl" => "/usr/bin/perl" )

čím na našom web serveri budeme spúšťať všetky .pl skripty za pomoci spúšťača /usr/bin/perl. Samozrejme, je potrebné, aby sme boli opatrní, perl je oveľa silnejší nástroj ako PHP a preto je potrebné mať poriadne ošetrené práva, poprípade pre paranoikov spúšťať celý web server v jail-e, ale tomu sa budeme venovať neskôr ( ak vôbec ).

Teraz je potrebné reštartovať Lighttpd:
# /etc/init.d/lighttpd restart

Následne už len stačí vytvoriť .pl skript v koreňovom adresári, s obsahom napr. :
#!/usr/bin/perl
print "Content-Type: text/plain", "\n\n";
print "Ahoj, ja som CGI skript na lighttpd serveri!!!", "\n";

a spustiť ho na adrese http://localhost/hello.pl.

Výstup by mal byť následovný:
Ahoj, ja som CGI skript na lighttpd serveri!!!

PHP
Keď už konečne máme podporu CGI skriptov, môžme sa pustiť do toho pravého orechového a to je podpora PHP. Na základe toho, že Lighttpd spracováva PHP skripty na základe FastCGI, je potrebné doinštalovať potrebné doplnky pre spracovávanie FastCGI skriptov. Spolu s PHP nainštalujeme aj jeho podporu pre vytvorenie MySQL spojenia, ktoré sa nám v budúcnosti hodí.

Debian:
# aptitude install php5-cgi php5-mysql

Arch Linux:
# pacman -S php php-cgi php-mysql

Fedora:
# yum install lighttpd-fastcgi php-cli php-mysql

Pre kompletnú aktiváciu PHP na našom Lighttpd serveri je potrebné editovať dva súbory. Prvým z nich je

Debian:
/etc/php5/cgi/php.ini

Arch Linux:
/etc/php/php.ini

Fedora:
/etc/php.ini

Na koniec tohto súboru je potrebné pridať riadok s cgi.fix_pathinfo=1, čo zabezpečíme a overíme sériou príkazov:
root@debian:/var/www# echo "cgi.fix_pathinfo=1" >> /etc/php5/cgi/php.ini
root@debian:/var/www# tail -n 1 /etc/php5/cgi/php.ini
cgi.fix_pathinfo=1

Druhý je konfiguračný súbor Lighttpd, ktorý sme už editovali, doň je potrebné pridať "mod_fastcgi", presne tak, ako sme to robili pri povolovaní CGI skriptov. Čiže výstup by mal byť približne takýto:
server.modules = (
        "mod_access",
        "mod_cgi",
        "mod_fastcgi",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
)

Samozreje, ako to bolo potrebné pri CGI skriptoch, aj pri PHP skriptoch je potrebné pridať deklaráciu, ktorá určí, čím sa majú .php skripty spúštať.
Na koniec konfiguračného súboru Lighttpd je potrebné pridať:

Debian:
fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/bin/php5-cgi",
                     "socket" => "/tmp/php.socket"
                 )))


Arch Linux:
fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/bin/php-cgi",
                     "socket" => "/tmp/php.socket"
                 )))


Fedora:
fastcgi.server = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "socket" => "/var/run/lighttpd/php-fastcgi.socket",
                                   "bin-path" => "/usr/bin/php-cgi"
                                 )))


Následne už len reštartovať Lighttpd:
# /etc/init.d/lighttpd restart

A testovanie .php skriptu na adrese http://localhost/test.php:
<?php
echo "Hello world!";
?>

Na čo však nesmieme zabúdať je naozaj veľká okresanosť Lighttpd serveru, ktorý zo začiatku nemá nič. To vidíme aj na tom, že je potrebné pridať mimetypes pre rozpoznávanie css kaskádových štýlov, bez ktorých sa moderný web nezaobíde. Nie su to však jediné mimetypes, ktoré nám chýbajú. Pridáme ich pridaním nasledujúceho na koniec konfiguračného súboru Lighttpd:
mimetype.assign = (
".html" => "text/html",
".txt" => "text/plain",
".jpg" => "image/jpeg",
".png" => "image/png",
".css" => "text/css"
)

Samozrejme, pridajte si mimetypes už podľa vlastného zváženia. Zoznam všetkých mimetypes nájdete na http://redmine.lighttpd.net/wiki/1/Mimetype.assignDetails

Ďalšia vec, ktorá nám môže chýbať je podpora mod_rewrite, ktoré často naše web aplikácie používajú pre jednoduchšie URL adresy ( index.php?page=show&id=news disponuje na URL /news a pod. )

Podporu pridáme pridaním nasledujúceho do konfiguračného súboru Lighttpd:
server.modules += ("mod_rewrite")
url.rewrite-once = ("^/([a-zA-Z]+)" => "/index.php?page=show&id=$1")

Pre viac podrobností je potrebné navštíviť http://redmine.lighttpd.net/wiki/1/Docs:ModRewrite

Často sa stáva, že potrebujeme hostovať viac stránok na jednom web serveri. V tomto prípade prichádzajú na radu tzv. virtual hosts. Ide to veľmi jednoducho. Na lokálnej sieti si môžme vytvoriť intranetovú stránku http://test.local. Za predpokladu, že server hosťujeme na IP adrese 10.174.32.102, na klientskom PC je potrebné vytvoriť DNS záznam nasledujúcim príkazom:
# echo "10.174.32.102                test.local" >> /etc/hosts

A samozrejme, vytvorením virtuálneho hostiteľa v konfiguračnom súbore Lighttp pridaním:
$HTTP["host"] == "test.local" {
               server.document-root = "/var/www/~test/"
}

Ako vám iste došlo, je potrebné vytvoriť zložku /var/www/~test/ a v nej index.html. Následne je potrebné za pomoci už spomínaného príkazu reštartovať Lighttpd a na adrese http://test.local máme obsah zložky /var/www/~test/.

Logovanie chodu serveru
Tento krok je pomerne dôležitý a každý dobrý administrátor by mal kontrolovať, čo sa na jeho serveri deje.
V konfiguračnom súbore Lighttpd vidíme definované server.errorlog = "/var/log/lighttpd/error.log", čo nám napovedá cestu k logu. Túto cestu je samozrejme možné zmeniť.

Bežný výpis tohoto error logu vyzerá následovne ( znázornený proces reštartovania serveru )
2011-02-18 10:55:50: (server.c.1512) server stopped by UID = 0 PID = 10921
2011-02-18 10:55:52: (log.c.166) server started

Týmto by sme tento diel ukončili. Ako ste si určite všimli, Lighttpd je veľmi jednoduchý, malý a sebestačný web server so skvelou dokumentáciou. Jeho nastavovanie je pomerne intuitívne a zvládne ho každý bez predchádzajúcich znalostí. Zvláda aj pokročilé funkcie ako sú virtuálne hostingy a podpora mod_rewrite.

Čo sme sa dnes naučili:

  • Ako nainštalovať Lighttpd
  • Ako sprovozniť CGI a PHP skripty
  • Nastaviť Lighttpd server
  • Vytvoriť interný virtuálny hosting
  • Zapnúť podporu mod_rewrite

    • Kritika 21.02.2011 | 22:57
      Avatar Dare_devil Debian, OpenSuse  Používateľ
      Prosim o vyjadrenie akychkolvek nazorov, kritiky, kladov, zaporov, cohokolvek. Dufam ze sa vam clanok pacil, uvitam otvorenu diskusiu. Kladne ohlasy ma motivuju v praci pokracovat, zaporne ohlasy mi povedia co robim zle. Ale vsak to urcite vsetci dobre viete.

      Pekny zvysok dna
      There is no flag large enough to cover the shame of killing innocent people
      • Re: Kritika 21.02.2011 | 23:36
        Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
        Pekne, chvalim. Jedine mi napadlo mozno este linkovat na kolegov z Linuxsoftu a na serialy o PHP / Perl.
        Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
        • Re: Kritika 22.02.2011 | 21:00
          tomy   Návštevník
          súhlasím, článok je výborný,

          dík


          privítal by som ešte "bezpečnosť web servera"
          • Re: Kritika 22.02.2011 | 21:10
            Avatar Dare_devil Debian, OpenSuse  Používateľ
            Neboj sa, vsetkemu sa budeme venovat v dalsich castiach. Bezpecnost vychadza tusim niekde na 8. cast pokial sa nemylim.

            Som rad ze sa vam clanky pacia, aspon viem, ze mam pre koho pisat :)
            There is no flag large enough to cover the shame of killing innocent people
            • Re: Kritika 22.02.2011 | 23:16
              tomy   Návštevník
              tu potom treba len ďakovať a doplniť zručnými čitateľmi skúsenosti


              dík
      • Re: Kritika 24.02.2011 | 00:22
        Avatar Michal Nánási Ubuntu 11.04  Používateľ
        sprovoznit -> po slovensky by malo byt radsej sfunkcnit, rozchodit alebo aj rozbehat.
        Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread!
    • preklep 16.03.2011 | 07:01
      kerio002   Návštevník
      Ahoj, drzim palce, a pokracuj v popise. Pre mna velmi zaujimave - som zaciatocnik, a zatial zrozumitelny popis.

      Prispejem:

      v zavere popisu je "zvládne ho každý bez predchádzajúcich vlastností.", si nemyslel nahodou na toto
      "zvládne ho každý bez predchádzajúcich znalostí." ?