Apache'i veebiserver

Allikas: Kuutõrvaja
Redaktsioon seisuga 17. august 2006, kell 18:32 kasutajalt Jj (arutelu | kaastöö)
(erin) ←Vanem redaktsioon | Viimane redaktsiooni (erin) | Uuem redaktsioon→ (erin)

Veebiserveri konfigureerimine ja käivitamine

Veebiserveri tööd juhib üks konfiguratsioonifail /usr/local/apache/conf/httpd.conf. Sellesse kirjutatake parameetrid üks reale, kusjuures # märgiga algavaid ridu ignoreeritakse. Ridu saab jätkata sisestades kurakallu (\) viimase sümbolina eelmisele reale, tegelikult eelviimasena, viimane on reavahetus :)

Lihtsal juhul võiks olla konfiguratsioonifail selline

User nobody Group nobody ServerType standalone ServerName www.zoo.tartu.ee ServerRoot "/usr/local/apache" DocumentRoot "/html" DirectoryIndex index.html ErrorLog /var/log/apache/error.log Listen 80 Options None <Directory /> AllowOverride None </Directory>

kus on kasutatud järgmisi direktiive

   * User - kasutaja, kelle õigustes veebiserver töötab
   * Group - grupp, kelle õigustes veebiserver töötab
   * ServerType - serveri tüüp, tavaliselt standalone so mitte inetd abil käivitatav
   * ServerName - millise nime server arvab endal olevat
   * ServerRoot - kataloog, mille all serveri programmid asuvad
   * DocumentRoot - veebifailid, mida külastajaile serveeritakse
   * DirectoryIndex - faili nimi, mis brauserisse saadetakse, kui ta küsib kataloogi eelusel, et sellenimeline fail kataloogis leidub
   * ErrorLog - fail, kuhu saadetakse veateated; kataloog, kus see fail asub peab olema kindlasti olemas!
   * Listen - port millel veebiserver ootab päringuid, kõigil võrguseadmetel
   * Options - väärtus None tagab, et külastajale näidatakse vaid neid veebilehti, mida ta nimeliselt küsib. 

Reeglina on veebiserverina töötaval arvutil nö tavaline nimi, näiteks kalake.zoo.tartu.ee ning nimeserveris on talle defineeritud lisaks ka mõned hüüdnimed (CNAMEga). Tavaliselt kasutatakse veebiserveri nime alguses kombinatsiooni www, kokku saab antud juhul www.zoo.tartu.ee, kuid veebiserveri nimi ei pea sugugi algama www-ga olles näiteks see sama kalake.zoo.tartu.ee.

Konfiguratsioonifailis kasutatud kataloogid peavad süsteemis leiduma, toodud näites peavad nad kuuluma lähtudes turvakaalutlustest juurkasutajale; samuti nendest kataloogidest ülevalpool asuvad kataloogid.

Reeglina on süsteemis vaikimisi olemas mitteprivilegeeritud kasutaja nobody grupiga nobody. Võib kasutada seda või luua spetsiaalne kasutaja, näiteks apache grupiga veeb. Veebiserveri mittekäivitumise põhjuseks on tihtipeale vastavate kasutajate puudumine süsteemis.

Näidates võrguseadme nime, vastatakse ainult sellelt seadmelt tulevaile päringutele, näiteks 'Listen 193.40.10.1 80'.

Sektsioon

<Directory /> AllowOverride None </Directory>

tähendab, et kataloogides pole täiendavate vahenditega õigust veebiserveri kofiguratsiooni täpsustada.

Kuigi teatud parameetrite järjekord konfiguratsioonifailis ei ole tähtis jääb kehtima parameetrile viimasena omistatud väärtus. Käivitamine

Veebiserver käivitatakse ja peatatakse käsuga apachectl

bash# /usr/local/apache/bin/apachectl start

Peatamine toimub käsuga stop

bash# /usr/local/apache/bin/apachectl stop

Peale konfiguratsioonifaili muutmist kehtestuvad muutused serveri taaskäivitamisel soovitavalt käsuga graceful, või restart

bash# /usr/local/apache/bin/apachectl graceful

Veebiserver tuleb käivitada juurkasutajaõigustes, kuid ta töötab konfiguratsioonifailis näidatud User ja Group kasutajana. See tähendab, et failisüsteemi osad, mida soovitakse veebi näidata peavad olema vastavatele UNIXi kasutajatele nähtavad. Tavaliselt on nende failide kasutajagrupile other antud lugemisõigus.

Töötavast veebiserverist annab tunnistust see, kui süsteemi protsessitabelis on httpd deemoni nimi, isegi mitu

bash# ps auxw | grep httpd root 30692 0.0 5.4 4236 3288  ?? Ss 4:39PM 0:00.16 /usr/local/apache/bin/httpd nobody 30840 0.0 5.5 4272 3324  ?? I 5:52PM 0:00.00 /usr/local/apache/bin/httpd nobody 30841 0.0 5.5 4272 3324  ?? I 5:52PM 0:00.00 /usr/local/apache/bin/httpd nobody 30842 0.0 5.5 4272 3324  ?? I 5:52PM 0:00.00 /usr/local/apache/bin/httpd nobody 30843 0.0 5.4 4248 3296  ?? I 5:52PM 0:00.00 /usr/local/apache/bin/httpd nobody 30844 0.0 5.4 4248 3296  ?? I 5:52PM 0:00.00 /usr/local/apache/bin/httpd nobody 30845 0.0 5.4 4256 3300  ?? I 5:52PM 0:00.00 /usr/local/apache/bin/httpd

Aga veel parem kinnitus on, kui olemaks näitega kooskõlas päring http://www.zoo.edu.ee näitab veebilehte, so faili /html/index.html. Samuti saab antud näite rakendamisel näha kasutajate kodulehti eeldusel, et nad asuvad kataloogide ~/public_html all.

Kui veebiserveri käivitamisel ilmneb raskusi, siis tasub uurida vealogi (/var/log/apache/error.log) sisu. Automaatne käivitamine

Soovides, et arvuti käivitamisel hakkaks veebiserver automaatselt tööle, lisage näiteks süsteemi algkäivitusskripti /etc/rc.d/rc.local rida

/usr/local/apache/bin/apachectl start

Samas, enamasti on Linuxitel veebiserveri käivitamine kuhugi standardsesse algkäivitusskripti juba nii kirja pandud, et kui veebiserver on olemas, siis püütakse seda käivitada. Otsinge märksõna httpd kataloogist /etc

bash# egrep -r httpd /etc

ning veenduge, et arvuti algkäivitamisel ikka see Apache'i käivitatakse, mis teie arvate peaks! Veebiressursside kasutusõigus

Veebiserveri konfigureerimisel on väga oluline näidata, mida vastuseks külastaja päringule tohib teha või saata. Või kas üldse külastajat teenindada. Direktiiv Option

Direktiivi Options abil saab määratleda, mida kataloogis leiduvate failidega lubatakse teha. Näiteks määrates minimaalsed õigused parameetriga None, saab kataloogis sisalduvaite failide poole pöördud vaid nimeliselt; failide nimekirja ei näidata.

Options None

Muud võimalused:

   * FollowSymLinks - kui brauser esitatud päringus on failinimi viide, siis seda järgitakse vaatamata, kas viidatav fail kuulub samale kasutajale kui viide
   * SymLinksIfOwnerMatch - kui brauser esitatud päringus on failinimi viide, siis seda järgitakse juhul, kas viidatav fail kuulub samale kasutajale kellele viide
   * Indexes - näidatakse serveri kataloogi failide nimekirja kui DirectoryIndexis näidatud faile ei leitud
   * ExecCGI - CGI sktiptide kasutamiseks
   * Includes - SSI failide kasutamiseks
   * IncludesNOEXEC - SSI failide kasutamiseks va #exec ja CGI skriptide #include
   * All - kõik eelnimetatu on lubatud 

Korraga võib määratleda ka mitu parameetrit eraldades nad üksteisest tühikuga.

Kui konfiguratsioonifailis kasutada mitmel Options direktiivi jääb kehtima viimane. Lisades parameetri algusse + või - märgi lisatakse või eemaldatakse vastav toime. Näiteks kasutades direktiive

Options Indexes Includes FollowSymLinks Options -FollowSymLinks

on toime samaväärne avaldisega

Options Indexes Includes

Direktiivi Options vaikeväärtus on All. Direktiivid Allow, Deny ja Order

Direktiividega Allow, Deny ning Order abil saab kehtestada millistelt domeenidelt tulevaid päringuid teenidatakse. Orderi abil seatakse millises järjekorras kontroll toimub, kusjuures rakendatakse viimast reeglit millega külastaja domeeninimi klapib. Kui ükski reegel ei klapi toimitakse vaikimisi nagu viimane Orderi parameeter näitab. Näiteks sellise sektsiooni puhul

Order Deny,Allow Deny from all Allow from zoo.tartu.ee

Päringut domeenist zoo.tartu.ee teenindatakse, esimene reegel (Deny) keelab kõik, kuid teine (Allow) lubaba domeeni zoo.tartu.ee. Kui Order oleks vastupidi, siis lubaks esimene reegel (Allow) zoo.tartu.ee kuid kehtima jääks viimane reegel (Deny). Reeglite järjekord failis ei loe kuna selle määrab Order.

Järgmises näiteks on lubatud päringud vaid tartu.ee domeenist va alamdomeen zoo.tartu.ee

Order Allow,Deny Allow from tartu.ee Deny from zoo.tartu.ee

Tõepoolest, päringut foo.tartu.ee domeenist teenindatakse kuna ta klapib esimese (Allow) reegliga, mis lubab ning teisega mis keelab mitte. Päringuit muudest domeenidest keelatakse, kuna nad ei klapi kummagi reegliga ning vaikimisi rakendatakse viimast Orderi parameetrit - Deny.

Order, Deny ja Allow direktiive saab kasutada vaid direktiivi Directory sees ning Deny ja Allow tuleb eraldada ainult täpselt ühe komaga! Veebiressursside grupeerimisvahendid

Veebiserveri kasutusõigust ning teisi omadusi reguleerivaid parameetreid saab grupeerida järgmiste direktiividega

   * Directory - kataloogis ning selle alla jäävate alamkataloogides sisalduvate failide grupeerimiseks
   * Files - faili nimede järgi failide grupeerimiseks
   * Location - URLi ning selle alla jäävate URLide grupeerimiseks 

Sellistele gruppidele saab rakendada korraga samu määratlusi, näiteks Option parameetriga. Directory direktiiv

Directory abil saab määrata näidatud kataloogi alla jäävatele failidele ühesuguseid omadusi. Näiteks kehtestame, et kataloogi /html/veeb/kalamaja alla jäävaites kataloogides käsitletakse DirectoryIndexina faile index.html ja index.htm

<Directory /html/veeb/kalamaja> DirectoryIndex index.html index.htm </Directory>

Files direktiiv

Sarnaselt Directory'le saab kehtestada näidatud regulaaravaldisega klappivate failinimedega failidele ühesuguseid omadusi. Näiteks kehtestame, et failides, mille nimi algab tähtedega "e_" ja lõpeb .html-ga, tohivad sisaldada Embperli konstruktsioone

<Files ~ "^e_.*\.html$"> Options +ExecCGI SetHandler perl-script PerlHandler HTML::Embperl </Files>

Location direktiiv

Sarnaselt Directory direktiivile saab Locationiga kehtestada osale veebikohale samasuguseid omadusi. Location mõjub mitte kataloogistruktuuri vaid URLi mõttes hulgale elementidele. Näiteks kehtestama, et URL'ist http://kalake.zoo.edu.ee/hobused edasi tohib näha kataloogide nimekirja

<Location /hobused> Options Indexes </Location>

Tavaliselt piisab Directory kasutamisest, kuid kuna veebiserveri kataloogi-ja URLihierarhia ei pruugi alati kokku langeda, siis on sellest vahel abi. Kataloogipõhine veebiserveri konfigureerimine

Veebiserveri põhikonfiguratsioonifailis näidatud väärtusi saab iga kataloogi jaoks täpsustavalt määrata kataloogis sisalduva konfiguratsiooni .htaccess faili abil. Selle faili nimi on määratud põhikonfiguratsioonifailis direktiiviga AccessFileName, mis peab esinema Directory sees. Faili süntaks on sama, mis põhikonfiguratsioonifailil. Seda, millised omadusi on ludatud .htaccess failiga täpsustada näitab põhikonfiguratsioonifailis direktiiv AllowOverride; järgimistele parameeritele vastab voli muuta toodud parameetreida

   * AuthConfig - AuthGroupFile, AuthName, AuthType, AuthUserFile, Require jne
   * FileInfo - AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument jne
   * Indexes - DirectoryIndex, AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName jne
   * Limit - Order, Allow, Deny
   * Options - Options, XBitHack
   * None - mitte midagi
   * All - kõik nimetatud 

Vaikimisi toimib parameeter All. Kui ei soovita lasta kasutajatel veebiserverit konfigureerida, siis kasutage peale veebiserveri põhiosa direktiivi

AllowOverride None

.htaccess failis tohib kasutada direktiivi Files aga ei saa kasutada Diectory või Location.

Tavaliselt on ohtutu ning kasutajaile piisav

AllowOverride Indexes AuthConfig

Alias

Direktiiv Alias võimaldab muuta veebi failile kataloogistruktuuri vastavust URLi struktuurile. Näiteks olgu kataloogis /html/veeb/hobused/2000/tyrinaitus/ehola_talu failid ning soovime neile ligi pääseda URLiga http://www.zoo.tartu.ee/ehola_talu. Kasutamea sellist Aliast

Alias /ehola_talu/ /html/veeb/hobused/2000/tyrinaitus/ehola_talu/

Antud juhul laheneb päring http://www.zoo.tartu.ee/ehola_talu/, kuid mitte http://www.zoo.tartu.ee/ehola_talu.

Lisaks saab Aliasega kaasata veebi faile ning katalooge, mis asuvad failisüsteemi mõttes väljaspool DocumentRootu.

Alias /valdek/ /html/valdek/veeb/

Aliase süntaks on järgmine

Alias URLi-tee kataloogi-tee

kus

   * URLi-tee on osa URList mis jääb peale serverinimi osa, näiteks http://www.zoo.tartu.ee/ehola_talu/ puhul /ehola_talu/
   * kataloogi-tee on vastava kataloogi nimi 

Aliasi saab kasutada peakkonfiguratsioonifailis või võrdväärsetes kohtades, näiteks VirtualHost sektsioonis. Aliasete kasutamisel tuleb tavaliselt kasutada kataloogi-tee'le vastavaid Directory direktiive muutmaks sobivaks veebiosa kasutusõigused. Aliased loetakse läbi enne Directory sektsioone.

Aliase kasutamisel tuleb tähele panna, et URLi tee asendatakse igal juhul kataloogiteega. Kas sel juhul, kui päring on pikem, kooskõlas kasutatud näitega päringu http://www.zoo.tartu.ee/ehola_talu/ratsahobused/piiker.html puhul esitatakse fail /html/veeb/hobused/2000/tyrinaitus/ehola_talu/ratsahobused/piiker.html.

Soovides teha paindlikumaid nö ümberkirjutusi kasutage mod_rewrite'i võimalusi. CGI

CGI kasutamiseks lisage konfiguratsioonifaili rida

AddHandler cgi-script .cgi .pl

Tulemusena püüab veebiserver käivida kõiki serveeritavaid .cgi ja .pl lõpuliste nimedega faile, eeldusel, et failile rakendub Optioni parameeter ExecCGI. Käivitamisel tekkiv programmiväljund saadetakse brauserisse, kusjuures see peab algama tuntud Content-type'iga, näiteks text/html. Seda võib teha näiteks Directory abil; kehtestame, et kõikjal veebi faile sisaldavas kataloogis /html/veeb/suhtleja ja selle all asuvad .cgi ja .pl lõpuliste nimedega failid on käivitatavad

<Directory /suhtleja> Options ExecCGI </Directory>

Soovides näidata, et vaatamata failinimele tuleb käsitleda faili CGI skriptina kasutage ScriptAlias direktiivi. Tüüpiliselt määratletaks URLi http://kalake.zoo.tartu.ee/cgi-bin/'le vastavad failid skriptideks

ScriptAlias /cgi-bin/ /html/veeb/cgi-bin/

Tulemusena, näiteks päringu http://kalake.zoo.tartu.ee/cgi-bin/kasutajatenimikiri.sh puhul käivitatakse fail /html/veeb/cgi-bin/kasutajatenimekiri.sh. SSI

SSI (Server Sides Includes) tehnika võimaldab sisestada brauseri päringus nõutud faili koosseisu muude failide sisu.

SSI kasutamiseks lisage konfiguratsioonifaili rida

AddType text/html .shtml AddHandler server-parsed .shtml

ning näidake näiteks direktiivide Directory ja Options parameetri Includes abil, milliseid faile tohib server käsitleda SSIdena. Näiteks kehtestame, et kataloogi /html/veeb/uudised all kasutatakse SSId

<Directory /html/veeb/uudised<> Options IncludesNOEXEC </Directory>

Tulemusena saab failides, mille nime lõpus on .shtml kasutada SSI konstruktsioone va va #exec ja CGI skriptide #include. Embperl

Embperl on tehnika, mis võimaldab sisestada HTML koodi sisse Perli konstruktsioone. Selle võimaluse kasutamiseks lisage konfiguratsioonifaili

<Files ~ "\.html$"> Options ExecCGI SetHandler perl-script PerlHandler HTML::Embperl </Files>

Tulmusena lahendab veebiserver failides, mille nime lõpetab .html sisalduva Perli koodi.

Muuseas, Embperli rakendamisel on veebiserver ka tavalise HTML süntaksi osas oluliselt rangem. Tüüpiliselt ei meeldi talle [# jne järgnevused, mida kasutatakse Embperli skriptide tähistamiseks. Et neid sümboleid siiski kasutada saada, esitage neid a la &#kood;, näiteks <. PHP

PHP on tehnika, mis võimaldab lisada HTML koodi sisse PHP keele konstruktsioone. Selle võimaluse kasutamiseks lisage konfiguratsioonifaili

AddType application/x-httpd-php .php

Veebiserverisse konfigureeritud PHP omadusi saab näha PHP skriptiga

<? phpinfo(); ?>

Serveri kasutajate kodulehed

Vaikimisi eeldab veebiserveri, et näiteks URLile http://www.zoo.tartu.ee/~priit vastab süsteemi kasutaja priit kodukataloogis olev kataloog public_html. Selle kataloogi nime määrab direktiiv UserDir. Veebi kaitsmine parooliga

Apache pakub vahendid veebistruktuuri kaitsmiseks parooliga. Konfiguratsioonifailis näidatakse ära, millist ressurssi kaitsta ning millist autentimissüsteemi kasutada.

Kõige lihtsamal juhul tuleb programmiga htpasswd genereerida lubatud külastajate paroolifail, milles on kirjas kasutajanimed ning vastavad paroolid. See fail on reeglina erinev süsteemi paroolifailist, kus veebiserver töötab. Kui külastaja püüab siseneda kaitstud veebi, avaneb dialoog ning küsitakse tema kasutanime ning parooli. Sobiva paari sisestamisel lubatakse külastaja veebile ligi, kusjuures kõnealust veebi saab kasutada kuni brauseri sulgemiseni.

Näiteks kaitseme kataloogistruktuuri /html/salajane kirjeldatud paroolikontrolliga

<Directory /html/salajane> AuthUserFile /usr/local/apache/conf/salajane.paroolifail AuthType Basic AuthName Salajane require valid-user </Directory>

kus on kasutatud direktiive:

   * AuthUserFile - paroolifailinimi, /usr/local/apache/conf/salajane.paroolifail
   * AuthType - millist tüüpi autentimisega on tegemist, antud juhul Basic
   * AuthName - parameetri väärtust näidatakse aknas, kuhu kasutaja sistab oma veebi kasutajanime ja parooli; sama veebi piires saab sama kasutajanimega seostada erinevaid paroole, mistõttu peab külastaja saama teada millist parooli konkreetsele juhul tarvitada
   * require valid-user - sellele ressursile lastakse ligi vaid peale edukat autentimist 

Sobiv paroolifail moodustatakse programmiga htpasswd

bash$ htpasswd -b -c -m salajane.paroolifail priit priiduparool

kus

  1. -b kasutaja parooliks loetakse käsurea viimane sõne (priiduparool)
  2. -c seda võtit tuleb kasutada vaid siis, kui paroolifaili veel ei eksisteeri; edaspidi peab selle võtme ära jätma, sest muidu kustutatakse olemasoleva paroolifaili sisu
  3. -m kasutada MD5 krüptimist; jättes selle võtme kirjutama tekitatakse CRYPT proolid
  4. järgnevad paroolifaili nimi (salajane.paroolifail) ja kasutajanimi (priit) 

Tundub, et peale Directory saab autentimist kasutada ka Location sektsioonis, mis on veebi suhtes veel asjakohasem.

Paroolifail peab olema loetav sellele kasutajale, kelle õigustes veebiserver töötab (näiteks nobody) ning soovitavalt mitte olema veebiga samas kataloogistruktuuris. Logi

Apache veebiserveriga saab logida tekstifaili erinevatel tingimustel toimunud päringuid ning neid logifaile automaatselt roteerida. Logida saab paraleelselt ka näidatud tingimustele erinevates formaatides erinevatesse failidesse.

Direktiiviga LogFormat kirjeldatakse mida logitakse Tüüpiliselt defineeritakse formaat nimega tavaline

LogFormat "%h %l %u %t \"%r\" %>s %b" tavaline

kus

   * %h - maisinanimi kust päring esitati
   * %l - kasutajanimi kes päringu esitas eeldusel, et IdentityCheck tomib; tavaliselt see väli jääb tühjaks kuna IdentityCheck'i kasutamine võtab tublisti veebi kiirust alla
   * %u - kui veebiserveri ressurss nõudis autentimist, siis kasutatud kasutajanimi
   * %t - päringu esitamise aeg
   * \"%r\" - jutumärkides esitatud päringu esimene rida
   * %>s - päringule vastuse olek (ingl. k. status)
   * %b - päringu vastuse maht baitides
   * tavaline - logiformaadi nimi 

Logimine ise toimub direktiiviga CustomLog, näiteks logime kasutades logiformaati tavaline faili /var/log/apache/tavaline.log

CustomLog /var/log/apache/tavaline.log tavaline

Soovides logifaili automaatselt roteerida, kasutage veebiserveriga kaasas olevat programmi rotatelogs. Näiteks moodustame iga nädal uue logi

CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/apache/tavaline.log 604800" common

Logi faili nimi moodustatakse lisades failinimele lõppu aja sekundites, mis on möödunud UNIXi ajastu algusest, so 1970. 1. jaanuar kell 00:00 hommikul. Vealogi

Vealogisse salvestatakse serveri töös toimunud vead sh näiteks päringud puuduvatele failidele. Logitaset saab reguleerida direktiiviga LogLevel, soovitatakse taset warn

LogLevel warn

Direktiiviga ErrorLog näidatakse kuhu logi salvestada

ErrorLog /var/log/apache/error.log

Logianalüsaatorid

Apache veebiserveri logi analüüsiks sobib kasutada näiteks programmi Webalizer. Veebiserveri status ja info

Eeldusel, et veebiserverisse on sissekompileeritud vastavad moodulid võtmetega --enable-module=status ja --enable-moudule=info, saab näha veebiserveri konfiguratsiooni (info) ning parasjagu olevat seisu (status).

Näidates konfiguratsioonifailis direktiivi ExtendedStatus parameetriks On esitatakse status põhjalikumalt.

Nende veebiserveri omaduste nägemiseks peab sisalduma konfiguratsioonifailis kaks sektsiooni

URLi http://www.zoo.tartu.ee/status-info jaoks

<Location /server-info>

   SetHandler server-info
   Order deny,allow
   Deny from all
   Allow from .zoo.tartu.ee

</Location>

URLi http://www.zoo.tartu.ee/server-info jaoks

<Location /server-status>

   SetHandler server-status
   Order deny,allow
   Deny from all
   Allow from .zoo.tartu.ee

</Location>

Mõlemas sektsioonis on kasutatud Deny ja Allow direktiive piiramaks nende URLide külastamise õigust. Kuigi sealt midagi väga salajast ei paista on külastajama lubatud vaid zoo.tart.ee domeeni masinastest. Veebi-indekseerijad

Apache veebiserver ei sisalda indekseerimisvahendeid so võimalusi luua serveeritavale veebile otsingumootorit. Küll aga sobib kasutada mõnda olemasolevat veebiindeksaatorit, näiteks Glimpse või HtDig.

Hoopis teine probleem on kuidas kontrollida mida tohivad teha teised otsingumootorid (ka tuntud kui robotid või nuhid) teie veebi külastades. Tüüpiliselt tuleb neid kontrollida kuna nad võivad täita avalikke andmebaase kiiresti vananeva infoga või ebasoovitavalt teie serverit koormata. URLi ümberkirjutamine

Ümberkirjutamise kasutamiseks on vaja mod_rewrite'i toetus serverisse kompilleerida võtmega --enable-module=rewrite.

See tehnika võimaldab suunata serverisse tulevad päringud ümber jäädes sama serveri piiridesse või välja. Ümbersuunamisi saab konfigureerida peakonfiguratsioonifailist või .htaccess failist.

Ümbersuunamisel saab kasutada tingimusi või teha seda juhuslikult.

Tõenäoliselt on võimalik järgnevalt näidetena toodud tegevusi korraldada ka muude vahenditega, URLi ümberkirjutamine mod_rewrite'ga on selleks üks käepärane vahend.

Ümberkirjutuste tegemiseks tuleb esmalt aktiviseerida ümberkirjutusmehhanism

RewriteEngine On

Ümberkirjutust ennast teostab direktiiv RewriteRule. Näiteks suuname kõik veebiserverisse kasutajale priit tulevad päringud (http://www.zoo.tartu.ee/~priit) aadressile http://www.priit.ee

RewriteRule ^/~priit.+ http://www.priit.ee

Direktiivi RewriteRule esimene argument on regulaaravaldis (^/~priit.+), ning kui sellega päring klapib, siis suunatakse brauser teise parameetriga näidatud URLile (http://www.priit.ee). Kasutaja brauseri Location real kirjutatakse URL paratamatult ümber.

Direktiivi süntaks on järmine

RewriteRule regulaaravaldis asendus [võtmed]

kus

   * regulaararvaldisega kontrollitakse kas URL klapib ümberkirjutamisreegliga, kusjuures URL on antud juhul see osa päringust, mis jääb paremale http://www.zoo.tartu.ee'st, näite puhul /~priit.
   * kui URL klappis, siis asendatakse URL asendusega 'asendus'
   * lisaks on mõnel juhul oluline kasutada võtmeid, mis kontrollivad ümberkirjutamise peensusi 

^ tähistab, et / peab olema URLi esimene sümbol ning peale priit 't' tähte võib tulla kuitahes palju mistahes sümboleid (.+). Muuseas, antud juhul suunatakse ümber kas näiteks päring http://www.zoo.tartu.ee/~priit-onvastmees.

Lubatud on kasutada järjest mitmeid asendusi, mil neid rakendatakse järjest, tulemuseks on viimane tehtud ümberkirjutus. Järgmise asenduse regulaaravaldist klapitatakse eelmise ümberkirjutamisel tehtud tulemusega.

Esitame näite sisemise ning välimise ümberkirjutamise kohta. Soovides vastuseks päringule http://www.zoo.tartu.ee/vana.html brauserisse saata lehe uus.html kusjuures jättes brauseri Location reale esialgne teksti so http://www.zoo.tartu.ee/vana.html, kasutage ümberkirjutamisreeglit

RewriteRule ^vana\.html$ uus.html

Sama, kuid brauseri Location real kajastub ümberkirjutus

RewriteRule ^vana\.html$ uus.html [R]

^vana\.html$ tähendab, et asendus toimub, kui päringu oli täpselt vana.html so algas v-ga (^) ja lõppes l-ga ($); punkt on regulaaravaldise erisümbol ja tuleb põgeda (\).

Kirjutades järjest mitu ümberkirjutusreeglit ning soovides, et ümberkirjutamine lõppeks antud reegliga, tuleb reegli lõppu lisada võti L (last).

RewriteRule ^/~priit.+ http://www.priit.ee [R,L] RewriteRule ^/~nea.+ http://www.nea.ee [R,L] RewriteRule ^/~inna.+ http://www.inna.ee [R,L] RewriteRule ^/~mart.+ http://www.mart.ee [R,L]

Kui aga veebiserverit tõstetakse ühest masinast teise, oletame, et uus töötab, kuid kasutajate kodud on vanas, siis lisage uue konfi selline rida

RewriteRule ^/~(.+) http://vana.zoo.edu.ee/~$1 [R,L]

Siin on kasutatud regulaaravalist koos asendamisega. $1 asendatakse tekstiga, mis klappis kasutatud regulaaravaldises avaldisega (.+). Praktiliselt näiteks Lisatingimuste kasutamine

Direktiiv RewriteRule teostab Ümberkirjutusi niikuinii tingimusi kasutades - regulaaravaldise abil. Peale selle saab seada direktiiviga RewriteCond lisatingimusi. Näiteks sõltuvalt serveri kellaajast saadetakse brauserile üks või teine veeb

RewriteEngine on RewriteCond  %{TIME_HOUR}%{TIME_MIN} >0700 RewriteCond  %{TIME_HOUR}%{TIME_MIN} <1900 RewriteRule ^index\.html$ paev.html

RewriteRule ^index\.html$ oo.html

%{TIME_HOUR} asendatakse päringu sooritamise kellaaja tunniväärtusega. Oluline on kirjutada < ja 0700 järjest, kusjuues toimub leksikograafilne stringide mitte arvude võrdlus.

Kui brauser esitab veebiserverile päringu päeval, siis toimub ümberkirjutus index.html -> paev kuna esimese direktiivi RewriteRule regulaaravaldis klappis URLiga ning kõik eelnenud lisatingimused olid täidetud. Seejärel klapitatakse teist RewriteRule'i eelmise väljundiga so paev.html - ei klapi ning midagi ei kirjutata ümber.

Lisatingimusi on sobiv kasutada ka brauserite eristamiseks.

RewriteCond  %{HTTP_USER_AGENT} Mozilla/4* RewriteRule ^leht.html$ leht.moz.html [L]

RewriteCond  %{HTTP_USER_AGENT} Lynx.* RewriteRule ^leht.html$ leht.lynx.html [L]

Sõltuvalt päringu tegija aadressist, saab esitada erinevat veebi.

RewriteCond  %{REMOTE_ADDR} ^192.168.1.3$ RewriteRule ^leht.html$ 192.168.1.3.html [L]

Ümberkirjutusalus

Kui te tegutsete sügavamal URLi-struktuuri sees, kasutage RewriteRule'i juurika ümbernimetamiseks direktiivi RewriteBase. Näiteks kirjutatakse URL http://www.zoo.tartu.ee/~priit/lemmikud/hobused.html ümber URLiks http://www.zoo.tartu.ee/~priit/lemmikud/kabjaksed.html

RewriteBase /~priit/lemmikud RewriteRule ^hobused.html$ kabjaksed.html

Ümerbkirjutustabel

Esitatud päringu juhuslikult valitud URLile ümbersuunamiseks on sobiv kasutada direktiivi RewriteMap. RewriteMap pakub võimaluse salvestada tekstifaili hulga URLe mille poole saab ümberkirjutusreeglist pöörduda. Näiteks loome olukorra kus päringule http://www.zoo.tartu.ee/juhuslik vastatakse juhuslikult valitud veebilehega.

Kirjeldame tabelikirjeldusfailis vl.txt juhuslike veebilehed nimed

bash# cat /usr/local/apache/vl.txt veebilehed 1.html|2.html|3.html|4.html|5.html|6.html|7.html

ning lisame veebiserveri konfiguratsioonifaili read

RewriteMap vl rnd:/usr/local/apache/vl.txt RewriteRule ^/juhus$ /home/html/juhus/${vl:veebilehed|html.html}

Ümberkirjutustabeli süntaks on selline

RewriteMap tablelinimi tabelitüüp:tabelikirjeldusfail

kus

   * tabelinimi - on kooskõlas ümberkirjutusreeglis kasutatud nimega
   * tabelitüüp - rnd (random) näitab et
   * tabelikirjeldusfail - failis kirjeldatakse tabeli sisu, näiteks juhusliku puhul peab eraldama andmed |-ga (loogiline OR) 

Ümberkirjutusreegeli asenduses kasutatud muutujat ${vl:veebilehed|html.html} väärtustatakse ümberkirjutustabeli vl võtme veeblilehed abil. Kui sellist ümberkirjutustabelit mingil põhjusel pole on muutuja väärtus html.html. Ümberkirjutuslogi

Ümberkirjutamise tööleseadmisel ning toimuvate ümberkirjutuste jälgimiseks saab kasutada direktiive RewriteLog ja RewriteLogLevel

RewriteLogLevel 3

RewriteLog /var/log/apache/rewrite.log

Veebiserveri konfiguratsioonifaili lugemine

Lihtasamatel juhtudel pole see oluline millises järjekorras veebiserver direktiivides esitatud reegleid kehtestab. Näiteks kui konfiguratsioonifailis ei sisaldugi Location ja Files sektsioone. Kuid soovides kasutada veebiseverit paindlikumalt tuleb järjekorraga arvestada.

Direktiivide puhul ei hooli Apache'i suurtest ja väikestest tähtedes, kuid parameetrite puhul on see tihti oluline.

Eeldusel, et te paigutate kogu konfiguratsiooni ühte faili sisalduvad seal kaks osa

   * põhiosa - kirjeldatakse veebiserveri üldisi omadusi, näiteks millise kasutaja õigustes ta töötab
   * ressursside määrangud - kehtestatakse reeglid, kuidas veebiserver faile serveerib, näiteks käsitleb .php lõpulisi faile PHP skriptidena 

Üldosa direktiivide järjekord pole oluline, kui sama direktiiv on väärtustatud mitu korda, jääb kehtima viimane väärtus.

Kui ressursside omadusi määratakse grupeerimisvahendite abil, siis sõltumate konfigureerimisfailis esinemise järjekorrast loetakse neid sellises järjekorras: Directory, Files, Location

Directory sees võivad olla kirjeldatud omakorda Files sektsioonid.

Directory sees on lubatud kasutada järgmisi direktiive:

   * DirectoryIndex
   * Options
   * Order, Allow, Deny
   * AllowOverride
   * AddHandler
   * AddType 

Files sektsioonis on lubatud kasutada praktiliselt neid samu direktiive mida sektsioonis Directory eeldusel, et neid on mõistlik rakendada failidele. Ilmselt ei saa kasutada näiteks direktiivi DirectoryIndex küll aga näiteks Allow ja Deny.

Location sektsioonis on lubatud kasutada praktiliselt neid samu direktiive mida sektsioonis Directory. Kuna Locationit rakedatakse kõige viimasena, siis ei saa seal näiteks kasutada Options direktiivi küll aga näiteks Allow ja Deny'id. Veebiserveri turvalisus

Veebiserveri kasutamisel arvestage, et iseenesest on veebiserver programm, mis teeb teie arvuti failid kättesaadavaks HTTP protokolli kasutavaile klientidele so brauseritele.

Kuigi veebiserver tuleb käivitada juurkasutaja õigustes, toimetab ta edasi konfiguratsioonifailis näidatud kasutajana (User, Group direktiivid).

Siiski, kui te kasutate konfiguratsioonifailis teatud kohtades IO ümbersuunamist, näiteks logimise juures, siis seda teeb Apache juurkasutajana.

Vältimaks ebameeldivaid üllatusi, veenduge, et veebiserveri juurikas ning selle alla jäävad kataloogid on piisavalt kaitstud, so kasutajatel pole neisse kirjutamisõigust. Veebiserver (/usr/local/apache/bin/httpd) ja muud temaga seotud failid, näiteks rotatelogs kuuluvad juurkasutajale ning on tavakasutajaile ning grupile others vaid käivitatavad. Tavaliselt piisab nende tingimuste täitmiseks anda käsud

bash# cd /usr/local/apache bash# chown 0 bin conf logs bash# chgrp 0 bin conf logs bash# chmod 755 bin conf logs

bash# chown 0 /usr/local/apache/bin/httpd bash# chgrp 0 /usr/local/apache/bin/httpd bash# chmod 511 /usr/local/apache/bin/httpd

Lisaks, mõelge järele, kas te peate kasutajaile lubama käivitada CGI skripte, ning andmebaase ning otsustage millistel tingimustel, samuti kataloogipõhine veebiserveri konfigureerimisvõimalus. Näiteks lubage kasutajatel CGI skripte tarvida ainult kataloogist ~/public_html/cgi-bin

<Directory /usr/home/*/public_html/cgi-bin> AddHandler cgi-script .cgi Options +ExecCGI </Directory>

Heal juhul saab veebiserveri tööleseadmise eel otsustada, milliste omadustega peab ta olema. Reeglina ei soovitata lihtsalt sisse kompileerida toetust, mida praktiliselt ei tarvitata. Näiteks, kui te olete kindel, et pole vajadust server-info ja server-status'e järele, siis jätke vastavad moodulid välja. Näidake seda Apache ./configure skripti juures vastavate võtmetega --disable-module=info --disable-module=status. Virtuaalveebiserverid

Ühte ja sama Apache veebiserverit saab tööle seada nii, et ta serveerib erinevaid andmeid sõltuvalt millise nimega tema poole pöörduti. Asjakorraldust nimetatakse virtuaaseteks veebiserveriteks, kuna füüsiliselt on tegu ühe arvutiga, kuid külastajaile jäetakse mulje, et neid on mitu.

Virtuaalseid veebiservereid on kolme sorti:

   * pordipõhised - sõltuvalt külastaja poolt kastatud pordist serveeritakse erinevat veebi
   * IP-põhised - sõltuvalt külastaja poolt kasutatud IP aadressist serveeritakse erinevat veebi
   * nimepõhised - sõltuvalt külastaja poolt kasutatud DNSi nimest serveeritakse erinevat veebi; reeglina vastavad erinevad nimed samale IP aadressile so on kirjeldatud CNAMEdena 

Põhimõtteliselt on võimalik kasutada neid virtuaalservereid ka kombineeritult korraga.

Erijuht virtuaalveebi serveerida on käivitada mitu eksemplari httpd servereid, iga oma konfiguratsiooniga. Kuna see võimalus on suhteliselt ebaefektiivne ning ei paku olulisi täiendavaid võimalusi, siis seda me ei käsitle.

Virtuaalserveri sektsioonis (VirtualHost) saab kasutada paljusid direktiive, mida peaserveri puhul sh direktiive Options, Alias, Directory, Location, Files. Samuti direktiive, mis reguleerivad SSI, CGI, PHP, Emperli, ümberkirjutamise ja logi kasutamist. Kui direktiivi ei näidata, kasutataks põhikonfiguratsiooni väärtus, kui seal seda samuti pole, siis vaikeväärtust. Pordipõhised virtuaalveebiserverid

Kasutamaks erinevaid veebiseveri konfiguratsioone sõltuvalt sellest, millisele pordile päring tuli, kasutage direktiive Listen ja VirtualHost. Näiteks teenindab veebiserveri konfiguratsioonifaili põhiosale vastav server kõiki päringuid va neid, mis on suunatud aadressi 193.40.50.1 (www.zoo.edu.ee) pordile 8080 või pordile 8081. Viimast kahte teenindatakse vastaval VirtualHosti sektsioonile. Näiteks seame lisaks põhiosale tööle kaks alternatiivset dokumendijuurikat ja logi

... Listen 80 Listen 193.40.50.1:8080 Listen 193.40.50.1:8081 <VirtualHost 193.40.50.1:8080>

  ServerAdmin mart@zoo.edu.ee
  DocumentRoot /www/mardizoo
  ErrorLog /var/logs/mardizoo.error.log
  CustomLog /var/logs/mardizoo.log common

</VirtualHost>

<VirtualHost 193.40.50.1:8081>

  ServerAdmin priit@zoo.edu.ee
  DocumentRoot /www/priiduzoo
  ErrorLog /var/logs/priituzoo.error.log
  CustomLog /var/logs/priiduzoo.log common

</VirtualHost>

kusjuures peakonfiguratsiooni on lisatud vastavad Listen direktiivid.

Brauseris tuleb päringud esitada vastavalt http://www.zoo.edu.ee:8080 või http://www.zoo.edu.ee:8081. IP-põhised virtuaalveebiseverid

IP-põhised virtuaalveebiserverite kasutamisel on veebiserveril mitu IP aadressi. St masinal on mitu võrgukaarti või on kasutatud IP-aliasingut.

IP-põhiste virtuaalveebiserverite kasutamisel näidake direktiivi VirtualHost juures ära IP aadress, ning samas sektsioonis kirjeldage kõnealuse veebiserveri omadused. Näiteks kui masinal on kaks võrgukaarti IP aadressidega 193.40.10.1 ning 193.40.50.1 kasutage sektsioone

<VirtualHost 193.40.50.1>

  ServerName www.zoo.tartu.ee
  ServerAdmin priit@zoo.tartu.ee
  DocumentRoot /www/tartuzoo
  ErrorLog /var/logs/tartuzoo.error.log
  CustomLog /var/logs/tartuzoo.log common

</VirtualHost>

<VirtualHost 193.40.10.1>

  ServerName www.zoo.edu.ee
  ServerAdmin mart@zoo.edu.ee
   DocumentRoot /www/eduzoo
   ErrorLog /var/logs/eduzoo.error.log
   CustomLog /var/logs/eduzoo.log common

</VirtualHost>

Peakonfiguratsiooni osa järgi teenindatakse neid päringuid, millel ei leidu sobivat virtuaalserverit. Näiteks kui masinal on veel kolmas võrguseade ning päring siseneb selle aadressile.

Virtuaalserveri direktiivi juurde võib kirjutada ka mitu IP aadressi, mispuhul kasutatakse kõnealust serverit neile kõigile tulnud päringutele vastamisel. Nimepõhised virtuaalveebiserverid

Nimepõhisete virtuaalveebiserverite kasutamine eeldab, et ühele IP aadressile (193.40.50.1) on nimesüsteemis (DNS) seatud näiteks CNAMEiga vastavusse mitu domeenime (www.zoo.tartu.ee, post.zoo.tartu.ee).

Kui soovite kasutada enam kui ühte veebiserverit, siis on soovitav kõik veebiserverid konfigureerida virtuaalseteks. Kusjuures põhiserverile ei vastagi DocumentRoot'i.

Nimepõhiste virtuaalveebiserverite kasutamine deklareeritakse peakonfiguratsiooni osas direktiiviga NameVirtualHost. Direktiivi järel näidatakse IP aadress, millele tulnud päringute teenindamisel kasutatakse sobivat VirtualHosti sektsiooni. Näiteks

NameVirtualHost 193.40.50.1

puhul kasutatakse aadressile 193.40.50.1 saabunud päringute töötlemiseks sobiva domeeninimega (ServerName) VirtualHost sektsiooni.

Erinevad virtuaalserverid kirjeldatakse direktiiviga VirtualHost, näiteks sarnase sektsiooniga

<VirtualHost 193.40.50.1>

   ServerName www.zoo.tartu.ee
   ServerAdmin priit@zoo.tartu.ee
   DocumentRoot /www
   ErrorLog /var/logs/www.error.log
   CustomLog /var/logs/www.log common

</VirtualHost>

<VirtualHost 193.40.50.1>

   ServerName post.zoo.tartu.ee
   ServerAdmin post@zoo.tartu.ee
   DocumentRoot /post
   ErrorLog /var/logs/post.error.log
   CustomLog /var/logs/post.log common

</VirtualHost>

Kui serveril on mitu võrguaadressi, siis võib kasutada direktiivi NameVirtualHost mitu korda ning lisada vastavad sektsioonid, kuid lühem on asendada IP aadress täringa (*)

NameVirtualHost *

<VirtualHost *>

   ServerName www.zoo.tartu.ee
   ServerAdmin priit@zoo.tartu.ee
   DocumentRoot /www
   ErrorLog /var/logs/www.error.log
   CustomLog /var/logs/www.log common

</VirtualHost>

<VirtualHost *>

   ServerName post.zoo.tartu.ee
   ServerAdmin post@zoo.tartu.ee
   DocumentRoot /post
   ErrorLog /var/logs/post.error.log
   CustomLog /var/logs/post.log common

</VirtualHost>

Päringuid, mis saabuvad direktiiviga NameVirtualHost näidatud aadressile ei teenindata IP-põhiste sektsioonide ega peaserveri konfiguratsiooni alusel. Kasulikud lisamaterjalid