Vous êtes sur la page 1sur 38

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Apache. Przewodnik
encyklopedyczny.
Wydanie III
Autorzy: Ben Laurie, Peter Laurie
Tumaczenie: Tomasz Sadowski
ISBN: 83-7361-124-X
Format: B5, stron: 704
Przykady na ftp: 1249 kB
Udostpniany nieodpatnie serwer WWW Apache obsuguje dzi ponad poow wszystkich
witryn w internecie i systematycznie zwiksza swj udzia w rynku.
Ksika Apache. Przewodnik encyklopedyczny. Wydanie III autorstwa dwch kluczowych
czonkw Zespou Apache, opisuje sposb pobrania, instalacji i zabezpieczania tego
serwera oraz omawia popularne rozszerzenia, umoliwiajce konstruowanie na jego
podstawie aplikacji WWW.
Serwer Apache osign rang kompletnego systemu i skutecznie konkuruje z wszystkimi
pozostaymi serwerami HTTP niezalenie od tego, czy bdziemy porwnywa je pod ktem
oferowanych moliwoci, efektywnoci, czy te szybko dziaania. Apache jest przy tym
dostpny dla wielu platform systemowych, w tym dla rnego rodzaju systemw Unix
i systemw z rodziny Windows.
Prezentowana Czytelnikom trzecia ju edycja ksiki opisuje najpopularniejsze wersje 1.3
i 2.0 serwera Apache dla systemw Windows i Unix kadc szczeglny nacisk na:
pobranie i kompilacj oprogramowania serwera,
konfiguracj i uruchamianie serwera w systemach Windows i Unix (obejmujc te
zagadnienia zwizane ze strukturami katalogw serwera i serwerami wirtualnymi),
omwienie interfejsu programowego serwera (w wersjach 1.3 i 2.0),
szczegowy opis zagadnie zwizanych z zabezpieczeniem serwera Apache
i wdroeniem go w rozbudowanych witrynach,
prezentacje penej listy dyrektyw konfiguracyjnych,
informacje na temat instalacji i testowania skryptw jzyka Perl uruchamianych
w trybie CGI oraz instalacji i korzystania z rozszerze, takich jak mod_perl, PHP,
JServ, Tomcat i Cocoon.
Dziki ksice Apache. Przewodnik encyklopedyczny administratorzy witryn WWW
nie majcy dotychczas do czynienia z serwerem Apache mog zapoznawa si z jego
dziaaniem stopniowo, analizujc i wdraajc przykadowe witryny prezentujce kolejne
etapy konfiguracji serwera. Dowiadczeni administratorzy i programici (niezalenie od tego,
czy ich rodowiskiem roboczym jest system Windows, czy Unix) doceni natomiast te
fragmenty ksiki, ktre skadaj si na kompletn i zwiz dokumentacj caego serwera.

Spis treci
Przedmowa ............................................................................................................9
Rozdzia 1. Wprowadzenie ...............................................................................19
Co robi serwer WWW? ........................................................................................................... 19
Jak dziaa Apache? .................................................................................................................. 23
Apache i sieci........................................................................................................................... 24
Jak dziaa klient?...................................................................................................................... 30
Co dzieje si po stronie serwera? ............................................................................................ 32
Planowanie instalacji serwera Apache .................................................................................... 33
Windows? ................................................................................................................................ 36
Ktra wersja Apache?.............................................................................................................. 36
Instalowanie serwera Apache .................................................................................................. 37
Kompilacja serwera Apache 1.3.x w systemie Unix ............................................................... 42
Nowe funkcje Apache 2........................................................................................................... 53
Instalacja Apache 2.0 w systemie Unix................................................................................... 56
Apache w systemach Windows ............................................................................................... 57

Rozdzia 2. Konfiguracja serwera Apache odsona pierwsza ..............63


Co to waciwie jest witryna WWW?...................................................................................... 63
Pierwsza witryna site.toddle ............................................................................................... 66
Uruchomienie serwera w Uniksie............................................................................................ 67
Uruchomienie serwera w Windows......................................................................................... 81
Dyrektywy ............................................................................................................................... 85
Obiekty wspuytkowane....................................................................................................... 87

Spis treci

Rozdzia 3. Wielkie otwarcie ...........................................................................91


Wicej i lepiej, czyli site.simple .............................................................................................. 91
Zaczynamy na powanie.......................................................................................................... 95
Dyrektywy blokowe................................................................................................................. 98
Pozostae dyrektywy.............................................................................................................. 102
Nagwki odpowiedzi HTTP................................................................................................. 112
Restart serwera....................................................................................................................... 117
Pliki .htaccess ........................................................................................................................ 118
Metapliki w standardzie CERN ............................................................................................. 118
Okrelanie terminu wanoci dokumentu.............................................................................. 119

Rozdzia 4. Serwery wirtualne.......................................................................123


Implementacja dwch witryn ................................................................................................ 123
Implementacja serwerw wirtualnych................................................................................... 123
Dwie kopie serwera Apache .................................................................................................. 128
Serwery wirtualne konfigurowane dynamicznie ................................................................... 132

Rozdzia 5. Uwierzytelnianie .........................................................................137


Protok uwierzytelniania...................................................................................................... 137
Dyrektywy sterujce uwierzytelnianiem ............................................................................... 139
Hasa w systemie Unix .......................................................................................................... 144
Hasa w systemie Windows ................................................................................................... 146
Hasa w sieci WWW.............................................................................................................. 146
Punkt widzenia klienta........................................................................................................... 146
Skrypty CGI........................................................................................................................... 147
Co by tu jeszcze ................................................................................................................. 147
Dyrektywy order, allow i deny .............................................................................................. 147
Pliki DBM w Uniksie ............................................................................................................ 151
Uwierzytelnianie oparte na skrtach wiadomoci..................................................................... 155
Dostp anonimowy ................................................................................................................ 159
Kilka wicze ........................................................................................................................ 162
Automatyczne przekazywanie danych o uytkowniku ......................................................... 163
Jak korzysta z plikw .htaccess?.......................................................................................... 164
Priorytety dyrektyw lokalnych .............................................................................................. 166

Spis treci

Rozdzia 6. Opis i negocjacja zawartoci dokumentw...........................169


Typy MIME ........................................................................................................................... 169
Uzgadnianie zawartoci ......................................................................................................... 177
Uzgadnianie jzyka................................................................................................................ 179
Mapy typw ........................................................................................................................... 183
Przegldarki a protok HTTP/1.1......................................................................................... 185
Mechanizm filtrw................................................................................................................. 186

Rozdzia 7. Indeksowanie katalogw ..........................................................191


Lepszy indeks ale jak? ...................................................................................................... 191
Rozszerzenia indeksw tworzonych przez uytkownika ...................................................... 202
Mapy graficzne ...................................................................................................................... 205
Dyrektywy zwizane z mapami graficznymi ........................................................................ 210

Rozdzia 8. Przeadresowywanie....................................................................213
Dyrektywa Alias .................................................................................................................... 214
Translacja adresw URL ....................................................................................................... 222
Korygowanie adresw ........................................................................................................... 230

Rozdzia 9. Apache jako serwer poredniczcy..........................................233


Bezpieczestwo ..................................................................................................................... 233
Dyrektywy sterujce serwerem poredniczcym .................................................................. 234
Czyby bd? ......................................................................................................................... 239
Wydajno serwera................................................................................................................ 239
Nasza konfiguracja ................................................................................................................ 242

Rozdzia 10. Co jest grane? ............................................................................249


Rejestrowanie za porednictwem skryptu i bazy danych ...................................................... 249
Dzienniki serwera Apache..................................................................................................... 250
Rejestrowanie konfiguracji.................................................................................................... 260
Status serwera ........................................................................................................................ 263

Rozdzia 11. Bezpieczestwo informacji......................................................267


Uytkownicy wewntrzni i zewntrzni ................................................................................. 269
Podpisy cyfrowe i pienidz elektroniczny............................................................................. 271
Certyfikaty cyfrowe ............................................................................................................... 276
Zapory sieciowe..................................................................................................................... 278

Spis treci

Zagadnienia prawne............................................................................................................... 282


Secure Sockets Layer (SSL) .................................................................................................. 283
Podstawowe mechanizmy bezpieczestwa w serwerze Apache ........................................... 283
Dyrektywy sterujce SSL ...................................................................................................... 301
Zestawy szyfrw .................................................................................................................... 321
Bezpieczestwo w praktyce................................................................................................... 328
Przyszo zabezpiecze........................................................................................................ 333

Rozdzia 12. Dua witryna WWW ...............................................................335


Konfiguracja komputera ........................................................................................................ 335
Bezpieczestwo serwera........................................................................................................ 335
Zarzdzanie du witryn ...................................................................................................... 340
Oprogramowanie dodatkowe................................................................................................. 343
Skalowalno ......................................................................................................................... 350
Rwnowaenie obcienia..................................................................................................... 352

Rozdzia 13. Piszemy aplikacje .....................................................................367


Witryny WWW jako aplikacje .............................................................................................. 367
Definiowanie logiki aplikacji ................................................................................................ 372
Jzyki XML i XSLT w aplikacjach WWW........................................................................... 377

Rozdzia 14. Polecenia wstawiane SSI ........................................................379


Informacja o rozmiarze pliku................................................................................................. 382
Informacja o czasie modyfikacji pliku .................................................................................. 383
Wstawianie treci plikw....................................................................................................... 384
Wykonywanie skryptw CGI ................................................................................................ 384
Zmienne w poleceniach SSI .................................................................................................. 385
Filtry SSI w Apache 2.0......................................................................................................... 385

Rozdzia 15. PHP..............................................................................................389


Instalacja jzyka PHP ............................................................................................................ 390
Site.php .................................................................................................................................. 391

Rozdzia 16. Skrypty CGI i jzyk Perl.........................................................397


wiat CGI .............................................................................................................................. 397
Udostpnienie skryptu serwerowi Apache ............................................................................ 399
Ustawianie wartoci zmiennych rodowiskowych ................................................................ 417

Spis treci

Ciasteczka .............................................................................................................................. 418


Dyrektywy serwera Apache zwizane z obsug skryptw .................................................. 430
suEXEC w Uniksie ................................................................................................................ 433
Procedury obsugi .................................................................................................................. 440
Akcje...................................................................................................................................... 442
Przegldarki ........................................................................................................................... 444

Rozdzia 17. Modu mod_perl ........................................................................447


Modu mod_perl jak to dziaa? ......................................................................................... 449
Dokumentacja moduu mod_perl .......................................................................................... 450
Instalacja moduu mod_perl wariant prostszy.................................................................... 450
Dostosowanie skryptw do wymaga moduu mod_perl ..................................................... 454
Zmienne globalne .................................................................................................................. 454
Dyrektywa strict..................................................................................................................... 457
Odwieanie pamici serwera................................................................................................ 457
Otwieranie i zamykanie plikw ............................................................................................. 458
Konfiguracja serwera dla moduu mod_perl ......................................................................... 458

Rozdzia 18. Kontenery apletw: JServ i Tomcat ......................................463


Modu mod_jserv................................................................................................................... 464
Tomcat ................................................................................................................................... 476
Tomcat i Apache.................................................................................................................... 482

Rozdzia 19. XML i serwlet Cocoon .............................................................487


Jzyk XML ............................................................................................................................ 487
Jzyk XML a Perl .................................................................................................................. 491
Cocoon ................................................................................................................................... 492
Cocoon 1.8 i JServ................................................................................................................. 492
Cocoon 2.0.3 i Tomcat........................................................................................................... 496
Testowanie serwletu Cocoon................................................................................................. 497

Rozdzia 20. Interfejs programowy serwera Apache .................................501


Dokumentacja ........................................................................................................................ 502
Biblioteka APR ...................................................................................................................... 502
Pule ........................................................................................................................................ 502
Globalna struktura konfiguracyjna ........................................................................................ 504
Lokalna struktura konfiguracyjna.......................................................................................... 507

Spis treci

Opis dania........................................................................................................................... 510


Dostp do danych konfiguracyjnych i opisu dania ............................................................ 514
Zaczepy, zaczepy opcjonalne i funkcje opcjonalne .................................................................. 514
Filtry, kubeki i zespoy ......................................................................................................... 524
Moduy................................................................................................................................... 536

Rozdzia 21. Piszemy wasny modu serwera Apache ..............................539


Wprowadzenie ....................................................................................................................... 540
Kody stanu ............................................................................................................................. 541
Struktura module ................................................................................................................... 543
Przykad od A do Z................................................................................................................ 583
Wskazwki oglne................................................................................................................. 602
Przystosowywanie kodu do wersji 2.0 .................................................................................. 602

Dodatek A Interfejs API 1.x..........................................................................607


Pule ........................................................................................................................................ 607
Globalna struktura konfiguracyjna ........................................................................................ 609
Lokalna struktura konfiguracyjna.......................................................................................... 610
Opis dania........................................................................................................................... 610
Dostp do danych konfiguracyjnych i opisu dania ............................................................ 613
Funkcje API ........................................................................................................................... 613

Skorowidz ..........................................................................................................669

Wielkie otwarcie
Majc ju dziaajcy w oparciu o podstawow konfiguracj serwer, mona pokusi si
o gbsz analiz jego moliwoci, z wiksz liczb szczegw. Na szczcie rnice
pomidzy wersjami serwera Apache dla systemw uniksowych i systemw Windows
kocz si po przebrniciu przez pocztkow konfiguracj; pniej mona si ju skupi
na tworzeniu dziaajcej strony WWW.

Wicej i lepiej, czyli site.simple


W chwili obecnej moemy ju przystpi do konstruowania przykadowych witryn
WWW, ktrych zawarto mona znale rwnie na zaczonej do ksiki pycie CD.
Aby zachowa jaki zwizek z realnym wiatem, oprzemy nasze eksperymenty na przykadzie fikcyjnej firmy Butterthlies, Inc., a dokadniej jej polskiej filii Butterthlies Polska, sp. z o.o. Nasza firma zajmuje si sprzeda artystycznych pocztwek i ma zamiar
zaistnie w Internecie. W zwizku z powyszym musimy przydzieli jej jakie adresy IP;
jako e wszystko to dzieje si na niby i ogranicza si do eksperymentu, adresy te bd
zawieray si w obrbie naszej sieci lokalnej. Dziki temu komputery biorce udzia
w dowiadczeniu nie bd musiay czy si z Internetem. Techniczna strona przydzielenia adresw sprowadza si do zmodyfikowania zawartoci plikw \windows\hosts (na
komputerze windowsowym penicym rol klienta) i /etc/hosts (na maszynie uniksowej bdcej serwerem), tak aby zawieray nastpujce wpisy:
127.0.0.1 localhost
192.168.123.2 www.butterthlies.com.pl
192.168.123.2 sales.butterthlies.com.pl
192.168.123.3 sales-IP.butterthlies.com.pl
192.168.124.1 www.gdzies-tam.com

92

Rozdzia 3. Wielkie otwarcie

Pierwszy wpis (localhost) jest obowizkowym elementem pliku i nie naley go usuwa;
nie powiniene rwnie kierowa do niego adnych da HTTP, gdy wyniki mog
by dziwne.
W kwestii pozostaych wpisw najlepiej skonsultuj si z administratorem swojej sieci lokalnej.
Witryna site.simple jest lekko zmodyfikowanym wariantem site.toddle. Skrypt go powinien dziaa bez problemw. Przypomnijmy sobie procedury uruchamiania i zatrzymywania serwera (w rnych systemach operacyjnych):
W Uniksie:
test -d logs || mkdir logs
httpd -d 'pwd' -f 'pwd'/conf/httpd.conf

Zatrzymanie polega na wykonaniu polecenia kill z odpowiednim identyfikatorem.


W Windows:
Otwrz okno DOS i w wierszu polece wpisz:
> cd "\program files\apache group\apache"
> apache -k start
Apache/1.3.26 (Win32) running ...

Aby zatrzyma serwer, otwrz drugie okno DOS i wpisz:


> apache -k stop
> cd logs

i ewentualnie:
> edit error.log

Procedury te bd obowizywa dla wszystkich witryn demonstrowanych w ramach


przykadw do ksiki, dlatego nie bdziemy ju przytacza procedur sterujcych uruchamianiem serwera.
Rwnie inne rnice w opisywanych dalej konfiguracjach serwera Apache dla Uniksa
i Windows powinny by minimalne. O ile nie bdzie to wyranie zaznaczone, naley
zakada, e wszystkie opisy stosuj si w tej samej formie do obu wersji.
Nie od rzeczy byoby rejestrowa w jakim pliku poczynania naszego serwera. Podczas
pracy nad pierwszym wydaniem ksiki mielimy uatwione zadanie, gdy uywana
przez nas wersja Apache automatycznie tworzya w katalogu /site.simple/logs plik
dziennika o nazwie access_log. Z sobie tylko wiadomych przyczyn projektanci serwera
Apache postanowili jednak zerwa z przeszoci i kolejne wersje wymagaj ju jawnego
okrelenia pooenia dziennika w pliku konfiguracji serwera. Suy do tego dyrektywa
TransferLog.

Wicej i lepiej, czyli site.simple

93

W swojej obecnej postaci plik httpd.conf powinien wyglda nastpujco:


User webuser
Group webgroup
ServerName localhost
DocumentRoot /usr/www/APACHE3/site.simple/htdocs
TransferLog logs/access_log

Katalog /site.simple/htdocs zawiera, jak poprzednio, tylko jeden plik o nazwie 1.txt:
Witamy w witrynie site.simple!

W chwili obecnej moesz ju uruchomi serwer poleceniem go, przesi si do komputera-klienta i za pomoc przegldarki WWW zajrze pod adres http://www.butterthlies.
com.pl. Powiniene ujrze co takiego:
Index of /
* Parent Directory
* 1.txt

Kliknicie cza do pliku 1.txt wywietli zawarty w tym ostatnim komunikat.


Wszystko adnie, ale jedna rzecz jest tu cokolwiek zagadkowa: ten sam wynik uzyskujemy, czc si z adresem http://sales.butterthlies.com.pl. Jakim cudem w ogle uzyskujemy
jak odpowied, skoro ani jeden, ani drugi adres (ani te odpowiadajce im numery IP)
nie zosta wpisany do pliku konfiguracji zawartego w katalogu site.simple?
Odpowied jest prosta. Konfigurujc komputer penicy rol serwera, nakazalimy jego
interfejsowi sieciowemu reagowa na komunikaty skierowane pod adresy:
192.168.123.2
192.168.123.3

Serwer Apache przez domniemanie prowadzi nasuch na wszystkich adresach zdefiniowanych dla danego systemu, a dla wybranych rwnie udziela odpowiedzi. Jeli
w systemie zdefiniowano serwery wirtualne (w naszym przypadku nie zdefiniowano),
Apache przeglda ich list w poszukiwaniu adresu IP, ktry odpowiada adresowi, pod
ktrym odebrano nadesane danie obsugi. Ustaliwszy, o ktry serwer wirtualny chodzi, Apache uywa odpowiadajcego mu bloku w pliku konfiguracyjnym, a jeli blok
taki nie istnieje gwnego bloku konfiguracji serwera. Do zagadnienia tego wrcimy
w dalszej czci rozdziau, omawiajc dyrektywy BindAddress, Listen i <VirtualHost>, dajce administratorowi skuteczn kontrol nad serwerami wirtualnymi.
Naley zauway, e prezentowany tu sposb pracy, polegajcy na czstej zmianie wykorzystywanych konfiguracji, jest w stanie skutecznie zdezorientowa przegldark, co
stwierdzilimy zarwno w przypadku programu Netscape, jak i Internet Explorera.
W przypadku przegldarki Netscape przekonanie si o poprawnym dziaaniu serwera
wymagao na og odwieania przegldanych plikw przez klikanie przycisku Reload
przy wcinitym klawiszu Ctrl. W skrajnych przypadkach konieczne byo wyczenie
buforowania stron w pamici podrcznej poprzez wydanie polece Edit-PreferencesAdvanced-Cache, wyzerowanie rozmiarw bufora dyskowego (Disk Cache) i pamiciowego
(Memory Cache) i wymuszenie kadorazowego badania aktualnoci dokumentu (zazna-

94

Rozdzia 3. Wielkie otwarcie

czenie przycisku opcji Every Time). W przypadku Internet Explorera konieczne okazao
si ustawienie opcji sterujcej czstotliwoci porwnywania zawartoci bufora z treci
odpowiedzi na Przy kadej wizycie na tej stronie (w oknie ustawie Tymczasowych plikw
internetowych) w ramach okna Opcje internetowe. Jeli nie wykonasz tych zabiegw, musisz liczy si z moliwoci wywietlenia przez przegldark mieszanki kilku ostatnio
odebranych z serwera stron. Dzieje si tak oczywicie dlatego, i w naszych dowiadczeniach bez przerwy onglujemy rnymi wersjami witryn, katalogw i plikw, czego
trzewo mylcy administrator ani uytkownik na og nie robi. Jeli jaki plik zostanie
zastpiony starsz wersj, przegldarka dochodzi do skdind susznego wniosku, e
zawarto pamici podrcznej jest bardziej aktualna i oczywicie j wywietla.
Wrmy jednak do rzeczy. Zakocz prac programu Apache, naciskajc na klawiaturze
serwera klawisze Ctrl+C (lub inn kombinacj suc do przerywania dziaania programu) i obejrzyj zawarto pliku /logs/access_log. Powinien on zawiera co w rodzaju
192.168.123.1 - - [<data i godzina>] "GET / HTTP/1.0" 200 256

Liczba 200 jest kodem odpowiedzi zwracanym przez serwer (ang. HTTP response code)
i oznacza, e operacja si udaa, za 256 liczb przesanych podczas transakcji bajtw.
Plik /error_log powinien by pusty, poniewa caa operacja przebiega bez bdw.
Warto oczywicie zaglda tam od czasu do czasu, chocia skojarzenie daty i czasu wpisu
z bdem, ktry wystpi jaki czas temu, bywa kopotliwe i nieraz trzeba w tym celu
mocno wysili pami.
ycie niestety bywa mniej przyjemne i czasami co si psuje. Dla przykadu, klient moe
zada od serwera nieistniejcego dokumentu. Sytuacj tak mona obsuy za pomoc dyrektywy ErrorDocument.

ErrorDocument
Dyrektywa ErrorDocument pozwala na okrelenie czynnoci podejmowanej w sytuacji, kiedy klient odwouje si do nieistniejcego dokumentu.
ErrorDocument kod-bdu nazwa-dokumentu
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalogi, pliki .htaccess

W przypadku wystpienia bdu, Apache moe zrobi jedn z czterech rzeczy:


1. Przekaza klientowi elementarny komunikat o bdzie, o sztywnej, niezmiennej treci.
2. Przekaza klientowi komunikat zdefiniowany przez administratora.
3. Przeadresowa danie klienta do lokalnego adresu URL przeznaczonego do obsugi
bdu.
4. Przeadresowa danie klienta do zewntrznego adresu URL.
Domylnie realizowana jest czynno pierwsza, natomiast trzy pozostae opcje mog by
wymuszone za pomoc dyrektywy ErrorDocument, ktrej argumentami s kod odpowiedzi serwera i komunikat o bdzie lub adres URL. Komunikat rni si od adresu

Zaczynamy na powanie

95

tym, i jest poprzedzony znakiem cudzysowu ("), ktry nie jest oczywicie przesyany
do klienta. W niektrych przypadkach Apache docza do komunikatu dodatkowe informacje i objanienia.
Uywane w dyrektywie ErrorDocument adresy URL mog by adresami lokalnymi
(rozpoczynaj si wwczas znakiem ukonika /) lub penymi adresami zawierajcymi nazw wza. A oto kilka przykadw:
ErrorDocument
ErrorDocument
ErrorDocument
ErrorDocument

500
404
401
403

http://gdzies.tam.com/cgi-bin/test
/cgi-bin/zlyadres.pl
/rejestracja.html
"Nieczynne z powodu urlopu"

Zwrmy uwag, e uycie w dyrektywie ErrorDocument penego adresu URL (rozpoczynajcego si od prefiksu metody, np. http) powoduje przesanie do klienta polecenia przeadresowania nawet wtedy, gdy dokument identyfikowany adresem znajduje
si na tym samym serwerze. Fakt ten ma kilka konsekwencji, z ktrych najwaniejsz
jest niemono odwoania si do nielokalnego dokumentu w przypadku obsugi bdu
numer 401 (co wynika z zasady dziaania podstawowego schematu uwierzytelniania
(Basic) w protokole HTTP).

Zaczynamy na powanie
Plik konfiguracji serwera httpd.conf znajdujcy si w katalogu /site.first ma posta:
User webuser
Group webgroup
ServerName localhost
DocumentRoot /usr/www/site.first/htdocs
TransferLog logs/access_log

W pierwszej edycji ksiki omawialimy w tym podrozdziale rwnie dyrektywy AccessConfig i ResourceConfig. Uycie w nich jako argumentu urzdzenia pustego
(/dev/null w Uniksie, NUL w Windows) pozwalao na zablokowanie odwoa do plikw
srm.conf i access.conf, co byo niezbdne w przypadku nieobecnoci tych ostatnich. Poniewa nowsze wersje Apache po prostu nie przejmuj si brakiem wspomnianych plikw, uycie obu dyrektyw jest obecnie zbdne. W przypadku ich uycia wskazywane
przez nie pliki zostan wczone do pliku konfiguracyjnego serwera. Od wersji 1.3.14
dyrektywy te mog wskazywa nie pliki, a katalogi wtedy do pliku konfiguracyjnego
serwera wczona zostanie zawarto wszystkich plikw przechowywanych w tych katalogach.
W Apache 2.0 dyrektywy AccessConfig i ResourceConfig zostay zniesione, wic
ich umieszczenie w pliku spowoduje zgoszenie przez serwer komunikatu o bdzie konfiguracji. Zamiast nich mona zastosowa dyrektywy Include: Include conf/srm.
conf i Include conf/access.conf (w podanej kolejnoci) na kocu gwnego pliku
konfiguracyjnego.

96

Rozdzia 3. Wielkie otwarcie

Ponadto Apache 2.0, do konsekwentnie, wymaga zdefiniowania dyrektywy Listen.


Jej brak spowoduje przerwanie dziaania serwera i wywietlenie komunikatu o bdzie
nastpujcej treci:
... no listening sockets available, shutting down.

W systemach z rodziny Windows Apache ignoruje dyrektywy User i Group, w zwizku


z czym mog one zosta usunite z pliku konfiguracyjnego.
Zadaniem serwera Apache jest dostarczanie klientom dokumentw w jzyku HTML,
a jak do tej pory nie mia on specjalnie czego dostarcza. Sprbujmy zatem utworzy
prost stron WWW zawierajc ofert firmy Butterthlies Polska i informacje o sposobie
zakupu towaru.
Nieco teorii na temat projektowania WWW mona znale np. w systemie pomocy
przegldarki Netscape pod hasem Creating Net Sites. Po odbyciu elementarnego kursu
jzyka HTML moemy ju wyprodukowa surow wersj wirtualnej broszurki:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>Katalog firmy Butterthlies</title>
</head>
<h1> Witamy w firmie Butterthlies Polska</h1>
<h2>Nasza oferta na lato</h2>
<p> Wszystkie kartki mona zamawia w paczkach po 20 sztuk, po 8 zotych za
paczk.
Przy zamwieniach powyej 100 sztuk udzielamy 10% rabatu.
Ceny nie zawieraj podatku VAT.
</p>
<hr>
<p>
Wzr 2315
<p align=center>
<img src="bench.jpg" alt="aweczka">
<p align=center>
aweczka dla zakochanych
<hr>
<p>
Wzr 2316
<p align=center>
<img src="hen.jpg" ALT="Kurnik a'la chiska pagoda">
<p align=center>
Chiski Kurnik
<HR>
<p>
Wzr 2317
<p align=center>
<img src="tree.jpg" alt="Bardzo adne drzewo">
<p align=center>
witynia Dumania
<hr>
<p>
Wzr 2318
<p align=center>
<img src="bath.jpg" alt="Cokolwiek niecodzienne zdjcie wanny">
<p align=center>
Wanna Surrealistyczna

Zaczynamy na powanie

97

<hr>
<p align=right>
Projekt pocztwek: Harriet@alart.demon.co.uk
<hr>
<br>
Butterthlies Polska sp. z o.o. * 99-000 Helionowo
</br>
</body>
</html>

Nasza strona pojawi si po raz pierwszy w katalogu /site.first/htdocs, ale w dalszej czci ksiki bdziemy j rwnie wykorzystywa w wielu innych witrynach. W takiej
sytuacji mona ulokowa odpowiednie pliki w jednym, centralnym katalogu i utworzy do nich dowizania z innych katalogw, wykorzystujc uniksowe polecenie ln. Co
wicej, kada zmiana oryginalnego pliku bdzie natychmiast widoczna we wszystkich
dowizaniach. Mamy wic katalog /usr/www/APACHE3/main_docs i plik dokumentu catalog_summer.html. Plik ten odwouje si do kilku oryginalnych zdj, przechowywanych
w postaci czterech plikw .jpg. Wszystkie te pliki znajduj si w katalogu /main_docs
i zostan dowizane do odpowiednich plikw w katalogu htdocs:
% ln /usr/www/APACHE3/main_docs/catalog_summer.html
% ln /usr/www/APACHE3/main_docs/bench.jpg

W ten sam sposb naley wykona dowizania do pozostaych plikw. Powysze polecenie powinno by wykonywane z wntrza katalogu /site.first/htdocs.
Po wykonaniu w tym katalogu polecenia ls okae si, e jest on peen potrzebnych nam
plikw.
W systemie Windows nie istnieje pojcie dowizania, tote bdziemy musieli za kadym
razem kopiowa pliki.

Domylny indeks witryny


Uruchom ponownie serwer poleceniem go. Przesid si do komputera-klienta i jeszcze
raz otwrz stron http://www.butterthlies.com.pl. Powiniene zobaczy co takiego:
Index of /
* Parent Directory
* bath.jpg
* bench.jpg
* catalog_summer.html
* hen.jpg
* tree.jpg

Plik index.html
Powyszy wydruk zawiera domylny indeks zawartoci katalogu, bdcy swego rodzaju protez, generowan automatycznie przez program Apache w przypadku braku
prawdziwego indeksu. Sprbujmy zatem stworzy porzdny indeks i zapisa go w pliku /htdocs/index.html:

98

Rozdzia 3. Wielkie otwarcie


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>Indeks ofert firmy Butterthlies</title>
</head>
<body>
<p>Witamy w firmie Butterthlies Polska</p>
<ul>
<li><A href="catalog_sumer.html">Oferta - lato</A>
<li><A href="catalog_summer.html">Katalog - jesie</A>
</ul>
<hr>
<br>
Butterthlies Polska sp. z o.o. * 99-000 Helionowo
</br>
</body>
</html>

Aby wszystko wygldao powaniej, dorzucilimy przy okazji jeszcze jeden plik, catalog_
autumn.html (idc po linii najmniejszego oporu, skopiowalimy plik catalog_summer.html,
zmieniajc w nim tylko por roku), tak wic w indeksie ostatecznie znalazy si dwa cza.
Jeli klient (przegldarka) w nadesanym przez siebie daniu przekae adres URL katalogu zawierajcego plik index.html, Apache automatycznie przele ten plik klientowi,
traktujc go jako domylny indeks katalogu (zachowanie to mona zmodyfikowa za pomoc dyrektywy DirectoryIndex). Kolejne odwoanie do adresu http://www.butterthlies.
com.pl powinno wic da nastpujcy efekt:
Witamy w firmie Butterthlies Polska
* Katalog - lato
* Katalog - jesie
--------------------------------------------------Butterthlies Polska sp. z o.o. * 99-000 Helionowo

Oczywicie jako dowiadczeni marketingowcy nie moemy zapomnie o rejestracji naszej witryny w wyszukiwarkach internetowych. Dziki temu ju wkrtce nasze strony
zaczn odwiedza pierwsi klienci (zostawiajc po sobie lady w pliku /logs/access_log),
a kiedy zapoznaj si z nasz fantastyczn ofert rozdzwoni si telefony z zamwieniami, a my wkrtce zostaniemy milionerami.

Dyrektywy blokowe
Apache udostpnia cay szereg tak zwanych dyrektyw blokowych (ang. block directives).
Dyrektywy te pozwalaj ograniczy zasig dziaania innych, zawartych w nich dyrektyw do okrelonych serwerw wirtualnych, katalogw czy te plikw. Dyrektywy blokowe s niezwykle istotne w praktyce, bowiem to wanie one a w szczeglnoci dyrektywa <VirtualHost> umoliwiaj administratorowi uruchomienie wikszej
liczby niezalenych serwerw WWW poprzez pojedyncze wywoanie programu Apache. Stwierdzenie to nabierze wikszego sensu, gdy przejdziemy do omawiania obsugi
kilku witryn (zobacz podrozdzia Implementacja dwch witryn w rozdziale 4.).
Obecnie zajmiemy si skadni dyrektyw blokowych.

Dyrektywy blokowe

99

<VirtualHost>
<VirtualHost wze[:port]>
...
</VirtualHost>
Zastosowanie: konfiguracja gwna

Dziaanie dyrektywy <VirtualHost> w pliku konfiguracji serwera jest podobne do


funkcji penionej przez znaczniki jzyka HTML. Nagwek <VirtualHost> otwiera
blok tekstu zawierajcy inne dyrektywy, odnoszce si do konkretnego serwera wirtualnego; koniec takiego bloku oznaczany jest cigiem </VirtualHost>. Oto przykad:
...
<VirtualHost www.butterthlies.com.pl>
ServerAdmin sales@butterthlies.com.pl
DocumentRoot /usr/www/APACHE3/site.virtual/htdocs/customers
ServerName www.butterthlies.com.pl
ErrorLog /usr/www/APACHE3/site.virtual/name-based/logs/error_log
TransferLog /usr/www/APACHE3/site.virtual/name-based/logs/access_log
</VirtualHost>
...

Dyrektywa <VirtualHost> pozwala ponadto okreli nazw domenow lub adres IP


(i ewentualnie numer portu) przypisany danemu serwerowi wirtualnemu. Jeli port nie
zostanie podany, domylnie wykorzystywany jest port numer 80 (standardowy port
uywany w protokole HTTP) lub port okrelony za pomoc dyrektywy Port. Uycie
w miejscu argumentu wze cigu _default_ powoduje wreszcie, e zawarto danego
bloku bdzie odnosia si do wszystkich serwerw nie uwzgldnionych w innych blokach <VirtualHost>. W rzeczywistym systemie wze bdzie oczywicie nazw domenow lub adresem IP naszego serwera.
Oprcz dyrektywy <VirtualHost> Apache udostpnia jeszcze trzy inne dyrektywy
pozwalajce na ograniczenie zasigu dziaania innych dyrektyw:
<Directory>
<Files>
<Location>
Powysze dyrektywy wymienilimy w kolejnoci rosncego priorytetu. Oznacza to, e
dziaanie dyrektywy <Directory> moe by zmodyfikowane przez nadrzdn wobec
niej <Files>, a ta z kolei musi ustpi pierwszestwa dyrektywie <Location>. Dyrektywy przetwarzane s grupami w nastpujcej kolejnoci:
1. <Directory> (nie zawierajce wyrae regularnych), rwnolegle z zawartoci plikw .htaccess1, przy czym te ostatnie maj priorytet.
2. <DirectoryMatch> i <Directory> zawierajce wyraenia regularne.
3. <Files> i <FilesMatch> (rwnolegle).
4. <Location> i <LocationMatch> (rwnolegle).
1

I oczywicie dla kadego katalogu zawartego w ciece dostpu.

100

Rozdzia 3. Wielkie otwarcie

W pierwszym przypadku katalogi przetwarzane s w kolejnoci od najmniejszego do


najwikszego2. Kolejno przetwarzania dla pozostaych grup okrelona jest porzdkiem
zapisu w pliku konfiguracji serwera. Dyrektywy zawarte wewntrz blokw <VirtualHost> realizowane s po wykonaniu odpowiadajcych im blokw pooonych na
zewntrz.

<Directory> i <DirectoryMatch>
<Directory katalog>
...
</Directory>
Zastosowanie: konfiguracja gwna, serwery wirtualne

Dyrektywa <Directory> pozwala na ograniczenie zasigu dziaania bloku dyrektyw


do wybranego katalogu lub grupy katalogw. Naley tu podkreli, e specyfikacja katalogu traktowana jest jako bezwzgldna, tj. dyrektywa <Directory /> obejmie swoim
dziaaniem nie katalog DocumentRoot (i jego podkatalogi), ale cay system plikw, poczynajc od katalogu gwnego. Nazwa katalogu moe zawiera symbole wieloznaczne
(?) (dowolny znak) i (*) (dowolny cig dowolnych znakw), a take nawiasy kwadratowe ([ ]), suce do definiowania zbiorw znakw. Dla przykadu, specyfikacja [a-d]
oznacza dowolny ze znakw a, b, c lub d. Umieszczenie znaku tyldy (~) na pocztku
nazwy katalogu pozwala na uycie w niej kompletnych wyrae regularnych3.
Dyrektywa <DirectoryMatch> dziaa tak samo jak <Directory ~ >, tj. akceptuje
definicj nazwy katalogu w postaci wyraenia regularnego, tak wic zapisy:
<Directory ~ /[a-d].*>

i
<DirectoryMatch /[a-d].*>

s identyczne i odnosz si do wszystkich katalogw, ktrych nazwy rozpoczynaj si


od liter a, b, c lub d.

<Files> i <FilesMatch>
<Files plik>
...
</Files>
Zastosowanie: konfiguracja gwna, serwery wirtualne, pliki .htaccess

Dyrektywa <Files> pozwala ograniczy dziaanie bloku dyrektyw do plikw o nazwie


zadanej parametrem plik. Nazwa ta okrelana jest wzgldem katalogu DocumentRoot
i moe zawiera symbole wieloznaczne oraz wyraenia regularne poprzedzone znakiem
tyldy (~). Dyrektywa <FilesMatch> uywana jest wraz z wyraeniami regularnymi
2
3

Okrelenia te odnosz si do liczby elementw katalogu, a nie ich cznej objtoci.


Szczegowe omwienie wyrae regularnych znajdziesz w ksice Jeffreya E. F. Friedla
Mastering Regular Expressions (OReilly & Associates; jak na razie ksika ta nie doczekaa si
niestety polskiego tumaczenia).

Dyrektywy blokowe

101

nie poprzedzonymi znakiem tyldy. Aby zatem ograniczy dziaanie bloku do trzech najpopularniejszych w Internecie typw plikw graficznych, musimy uy dyrektywy:
<FilesMatch "\.gif|jpe?g|png$">

za aby zapewni specjalne traktowanie katalogom produktw firmy Butterthlies Polska,


moemy uy konstrukcji:
<FilesMatch catalog.*>

W odrnieniu od <Directory> i <Location>, dyrektywa <Files> moe by


umieszczana w plikach .htaccess.

<Location> i <LocationMatch>
<Location adres-URL>
...
</Location>
Zastosowanie: konfiguracja gwna, serwery wirtualne

Uycie dyrektywy <Location> pozwala na ograniczenie zasigu dziaania bloku dyrektyw do zadanych adresw URL. Podobnie jak poprzednio, adresy mog zawiera symbole wieloznaczne oraz wyraenia regularne poprzedzone znakiem tyldy. Zgodnie z reguami interpretacji wyrae regularnych wprowadzonymi w programie Apache 1.3,
symbole (*) i (?) nie spowoduj dopasowania znaku ukonika (/). Argumentami dyrektywy <LocationMatch> s wyraenia regularne nie poprzedzone znakiem tyldy (~).
Wikszo dyrektyw uywanych w bloku <Directory> moe by rwnie stosowana
w bloku <Location>. Naley jednak pamita, e uycie w nim dyrektywy AllowOverride, chocia poprawne z formalnego punktu widzenia, jest pozbawione sensu.

<IfDefine>
<IfDefine nazwa>
...
</IfDefine>

Dyrektywa <IfDefine> pozwala na warunkowe uaktywnienie bloku dyrektyw w przypadku uruchomienia programu Apache z opcj D nazwa4. Pozwala to na zamknicie
kilku wariantw konfiguracji w pojedynczym pliku httpd.conf. Moliwo ta przydaje si
gwnie podczas testowania i tworzenia wersji dystrybucyjnych, jest natomiast rzadziej
stosowana w przypadku regularnych witryn o ustalonej strukturze.

<IfModule>
<IfModule [!]nazwa-pliku-moduu>
...
</IfModule>

Opcja ta definiuje symbol o zadanej nazwie; zob. te Opcje wywoania programu Apache
w rozdziale 2. przyp. tum.

102

Rozdzia 3. Wielkie otwarcie

Dyrektywa <IfModule> pozwala na warunkowe uaktywnienie bloku dyrektyw w zalenoci od tego, czy modu o danej nazwie zosta doczony do programu Apache
(w trakcie kompilacji bd te dynamicznie, poprzez zaadowanie w trakcie pracy pliku
DLL). Poprzedzenie nazwy moduu znakiem wykrzyknika (!) powoduje uaktywnienie
bloku w przypadku, gdy modu nie zosta doczony. Bloki ograniczone dyrektywami
<IfModule> mog by zagniedane. Parametr nazwa-pliku-moduu powinien odpowiada nazwie pliku rdowego moduu, na przykad mod_log_conf.c.

Pozostae dyrektywy
Pozostao nam do omwienia jeszcze kilka dyrektyw o charakterze administracyjnym.

ServerName
ServerName nazwa-domenowa
Zastosowanie: konfiguracja gwna, serwery wirtualne

Dyrektywa ServerName definiuje nazw domenow serwera uywan w adresach URL


wykorzystywanych do przeadresowywania da. Brak dyrektywy spowoduje wykonywanie przez serwer prby samodzielnego okrelenia nazwy domenowej serwera na
podstawie wasnego adresu IP; jednake metoda ta moe nie zadziaa lub spowodowa
wybranie nazwy innej ni preferowana nazwa domenowa wza. Przykadowo, jeeli
kanoniczna nazwa domenowa serwera to simple.example.com, ale docelowo klienci maj
si odwoywa do wza www.example.com, dyrektywa ServerName powinna mie nastpujc posta:
ServerName www.przyklad.com

UseCanonicalName
UseCanonicalName on|off
Warto domylna: on
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalogi, pliki .htaccess

Dyrektywa ta steruje sposobem tworzenia przez Apache adresw wskazujcych na siebie, co ma miejsce np. w przypadku przeadresowania odwoania adresu http://
www.firma.com/jakis/katalog do poprawnej formy http://www.firma.com/jakis/katalog/ (rnica tkwi w kocowym znaku ukonika). W przypadku wczenia dyrektywy UseCanonicalName (stan domylny), do przeadresowania zostanie uyta nazwa serwera i numer portu zadane dyrektywami ServerName i Port (ale nie w przypadku serwera
Apache 2.0). Jej wyczenie spowoduje uycie nazwy i numeru portu okrelonej w oryginalnym daniu.
Dyrektywa UseCanonicalName przydaje si midzy innymi w sytuacji, w ktrej komputery uytkownikw nale do tej samej domeny co serwer WWW (ma to miejsce np.
w sieciach typu intranet). W takim przypadku uytkownik moe odwoywa si do serwera za pomoc nazwy skrconej (np. www), oszczdzajc sobie w ten sposb wpi-

Pozostae dyrektywy

103

sywania penej nazwy domenowej (np. www.firma.com). Jeli dyrektywa UseCanonicalName jest aktywna, podanie przez uytkownika adresu bez kocowego ukonika
(np. http://www/katalog) spowoduje przeadresowanie dania do adresu URL http://www.
firma.com/katalog/, podczas gdy w przypadku wyczenia dyrektywy danie trafioby
pod adres http://www/katalog/. Ma to oczywiste zastosowanie w sytuacji korzystania dostpu autoryzowanego ponowne uycie nazwy serwera zwalnia uytkownika od koniecznoci powtrnego przechodzenia przez procedur autoryzacji, co staoby si
w momencie zorientowania si przez przegldark, e nazwa serwera ulega zmianie.
Inne, bardziej zoone zastosowania wi si z translacj nazw i adresw zwizan
z pewnymi aspektami uycia zapr sieciowych.

ServerAdmin
ServerAdmin adres-e-mail
Zastosowanie: konfiguracja gwna, serwery wirtualne

Dyrektywa ServerAdmin pozwala zdefiniowa adres poczty elektronicznej umieszczany


automatycznie przez Apache na stronach generowanych w przypadku wystpienia bdu.
Warto uy w tym celu dedykowanego adresu, np. problemy-WWW@butterthlies.com.pl.

ServerSignature
ServerSignature off|on|email
Warto domylna: off
Zastosowanie: katalogi, pliki .htaccess

Dyrektywa ServerSignature umoliwia zidentyfikowanie serwera, ktry faktycznie


obsuy dane danie (co ma znaczenie np. w przypadku uycia serwerw poredniczcych). Jej wczenie (ServerSignature on) powoduje automatyczne doczanie do
generowanych przez serwer dokumentw stopki (sygnatury), zawierajcej numer wersji
programu serwera i nazw serwera wirtualnego zdefiniowan w dyrektywie ServerName. Uycie formy ServerSignature email dodaje do stopki cze mailto: zawierajce adres okrelony dyrektyw ServerAdmin.

ServerTokens
ServerTokens productonly|min[imal]|OS|full
Warto domylna: full
Zastosowanie: konfiguracja gwna

Dyrektywa ServerTokens ustala zakres informacji, jakimi przedstawia si serwer


Apache. Administrator troszczcy si o bezpieczestwo serwera moe ograniczy ilo
informacji o serwerze, jaka moe trafi do potencjalnych wamywaczy.
productonly (od wersji 1.3.14)
Serwer zwraca wycznie nazw Apache.
min[imal]
Serwer zwraca tylko swoj nazw i numer wersji, np. Apache v1.3.

104

Rozdzia 3. Wielkie otwarcie

OS
Serwer zwraca swoj nazw i numer wersji oraz nazw macierzystego systemu operacyjnego, np. Apache v1.3 (Unix).
full
Serwer zwraca dane opisane powyej oraz informacje o wchodzcych w skad jego
kodu moduach, np. Apache 1.3 (Unix) PHP/3.0 MojModul/1.2.

ServerAlias
ServerAlias nazwa1 nazwa2 nazwa3 ...
Zastosowanie: serwery wirtualne

Dyrektywa ServerAlias umoliwia zdefiniowanie listy aliasw, czyli synonimw


nazw identyfikujcych dany serwer wirtualny. Protok HTTP/1.1 umoliwia odwoanie
si do serwera poprzez nazw za pomoc pola Host: nagwka HTTP. Podana w nagwku nazwa powinna odpowiada ktrej z nazw zdefiniowanych w dyrektywach
ServerName, ServerAlias lub VirtualHost.

ServerPath
ServerPath cieka
Zastosowanie: serwery wirtualne

Protok HTTP/1.1 umoliwia zwizanie z tym samym adresem IP kilku nazw domenowych serwerw. W takiej sytuacji klient identyfikuje odpowiedni serwer poprzez
przesanie w nagwku dania pola Host: nazwa-serwera. Chocia migracja do protokou HTTP zostaa ju prawie zakoczona, niektre przegldarki bd zapewne jeszcze
przez jaki czas uyway protokou HTTP/1.0, nie przesyajc pl Host5. Z tego te
wzgldu stworzono dyrektyw ServerPath pozwalajc na dostp do witryny poprzez podanie cieki.
Naley tu podkreli, e uycie dyrektywy ServerPath jest nieco kopotliwe, wymaga
bowiem ogromnej dyscypliny w kwestii spjnoci zapisu czy uywanych wewntrz
witryny. Wszystkie one musz by zapisywane w postaci wzgldnej, tylko wtedy bowiem bd prawidowo wsppracoway z rnymi adresami URL. Jeli jednak musisz
zapewni w witrynie obsug przegldarek nie korzystajcych z protokou HTTP/1.1
i nie przesyajcych pl Host, w zasadzie nie masz wyboru.
Zamy, dla przykadu, e utworzylimy dwie witryny o nazwach www.firma.com i sklep.
firma.com, przypisujc im obu ten sam adres IP, np. 192.168.123.2. Nasz plik httpd.
conf wyglda tak:
<VirtualHost 192.168.123.2>
ServerName www.firma.com
DocumentRoot /usr/www/firma
5

Z drugiej strony warto zauway, e w okres przejciowy w znacznym stopniu zakoczy si


jeszcze przed wprowadzeniem protokou HTTP/1.1 wiele przegldarek wysyao pola Host:
rwnie w przypadku korzystania z wersji 1.0. Tym niemniej w sporadycznych przypadkach
omawiana dyrektywa moe okaza si przydatna.

Pozostae dyrektywy

105

ServerPath /firma
</VirtualHost>
<VirtualHost 192.168.123.2>
ServerName sklep.firma.com
DocumentRoot /usr/www/sklep
ServerPath /sklep
</VirtualHost>

Przegldarka korzystajca z protokou HTTP/1.1 moe w takiej sytuacji rozrni obie


witryny, przesyajc po prostu adresy URL http://www.firma.com/ i http://sklep.firma.com/.
Poniewa protok HTTP/1.0 pozwala na rozrnianie witryn wycznie na podstawie
adresw IP, oba powysze adresy URL bd w tym przypadku tosame. Przegldarki
korzystajce z protokou HTTP/1.0 mog jednak odwoywa si do obu witryn indywidualnie, podajc adresy http://www.firma.com/firma i http://www.firma.com/sklep. Warto zauway, e ten sam efekt miayby odwoania do adresw URL http://www.sklep.com/firma
i http://www.sklep.com/sklep, bowiem obu wystpujcym w nich nazwom domenowym
odpowiada ten sam adres IP (a zatem z punktu widzenia protokou HTTP/1.0 s one
identyczne).

ScoreBoardFile
ScoreBoardFile nazwa-pliku
Warto domylna: logs/apache_status
Zastosowanie: konfiguracja gwna

Dyrektywa ScoreBoardFile jest w niektrych systemach wymagana do poprawnego


utworzenia pliku tymczasowego, wykorzystywanego przez serwer do zarzdzania procesami potomnymi (tzw. plik tablicy procesw potomnych, scoreboard file). Najprostsz
metod przekonania si, czy w danym systemie plik taki jest wymagany, jest uruchomienie programu Apache i sprawdzenie, czy w wyniku tego dziaania zosta utworzony
plik o nazwie zadanej w dyrektywie. Jeli okae si, e plik taki jest niezbdny, naley
podj kroki w celu zapewnienia, by nie by on rwnoczenie uywany przez wicej ni
jeden proces gwny serwera Apache.
W przypadku koniecznoci uycia pliku tablicy procesw potomnych mona sprbowa
umieci go na dysku pamiciowym (wirtualnym, RAM disk). Powinno to poprawi
osigi serwera, jednak wie si z ryzykiem utraty danych.
Uywajc serwera Apache w systemach Linux 1.x i Unix System V Release 4, mona
prbowa zablokowa uycie pliku tablicy procesw potomnych, doczajc opcje DHAVE_SHMGET DUSE_SHMGET_SCOREBOARD do zmiennej EXTRA_CFLAGS w pliku
konfiguracyjnym kompilacji serwera Configuration. Rozwizanie to powinno dziaa
przynajmniej w czci konfiguracji Linuksa 1.x (w wersjach Apache wczeniejszych od
1.3b4 wystarczao uycie opcji HAVE_SHMGET).

CoreDumpDirectory
CoreDumpDirectory katalog
Warto domylna: <ServerRoot>
Zastosowanie: konfiguracja gwna

106

Rozdzia 3. Wielkie otwarcie

Dyrektywa ta okrela pooenie katalogu, w ktrym w razie awarii Apache zapisze


plik zrzutu pamici procesu (ang. core dump file). Plik ten mona nastpnie podda analizie za pomoc debugera. Domylnie plik ten powinien by zapisywany w katalogu
okrelonym dyrektyw ServerRoot, jednak przypisane mu prawa dostpu nie umoliwiaj zapisywania tam danych przez proces serwera uruchomiony przez zwykego
uytkownika. Uycie dyrektywy CoreDumpDirectory ma sens tylko w Uniksie, gdy
Windows nie obsuguje funkcji zrzutu pamici w przypadku zaamania systemu.

SendBufferSize
SendBufferSize liczba
Warto domylna: ustalana przez system operacyjny
Zastosowanie: konfiguracja gwna

Dyrektywa ta pozwala powikszy wielko bufora transmisji uywanego przez procedury obsugi protokou TCP/IP ponad domyln warto okrelan przez system operacyjny. W specyficznych przypadkach pozwala to na popraw wydajnoci, jednak nie radzimy Ci zmienia domylnego ustawienia parametrw TCP/IP, o ile nie znasz si na
rzeczy naprawd dobrze.

LockFile
LockFile plik
Warto domylna: logs/accept.lock
Zastosowanie: konfiguracja gwna

Jeli Apache zostanie skompilowany z opcj USE_FCNTL_SERIALIZED_ACCEPT lub


USE_FLOCK_SERIALIZED_ACCEPT, przed uruchomieniem musi on zapisa na dysku
lokalnym plik blokady (ang. lock file). Operacja ta moe okaza si niemoliwa w przypadku umieszczenia katalogu logs w woluminie NFS. Nie jest rwnie wskazane
umieszczanie pliku blokady w katalogu dostpnym dla wszystkich do zapisu, gdy jego
przypadkowe utworzenie zablokuje moliwo uruchomienia serwera. Mechanizm blokady jest niezbdny w niektrych systemach operacyjnych, ktre nie toleruj rwnoczesnego wywoania funkcji accept()przez kilka procesw dla pojedynczego gniazda (to
wanie w niej siedzi Apache w trakcie oczekiwania na poczenie). Z tego te wzgldu konieczne jest uycie jakiego mechanizmu szeregowania wywoa funkcji accept(). Mona tego dokona poprzez uycie pliku blokady, jednak rozwizanie to nie
daje si zastosowa w przypadku uycia systemu NFS.

AcceptMutex
AcceptMutex default|metoda
Warto domylna: default
Zastosowanie: Konfiguracja gwna

Dyrektywy AcceptMutex su do ustalenia metody wykorzystywanej nastpnie przez


Apache do szeregowania wielokrotnych wywoa funkcji accept() w stosunku do
gniazda sieciowego, inicjowanych przez procesy potomne serwera. W wersjach poprzedzajcych Apache 2.0 metod szeregowania mona byo okreli wycznie na etapie

Pozostae dyrektywy

107

kompilacji. Wybr optymalnej metody uzaleniony jest oczywicie od cech systemu operacyjnego i architektury serwera. Szczegowe informacje na ten temat mona znale
pod adresem http://httpd.apache.org/docs-2.0/misc/perf-tuning.html.
W przypadku rezygnacji z okrelenia wartoci dyrektywy AcceptMutex lub ustawienia
jej na warto domyln, serwer skorzysta z ustawie okrelonych w trakcie kompilacji.
Pozostae dostpne metody zostay wyliczone poniej. Warto odnotowa, e nie wszystkie
metody s odpowiednie dla kadej platformy. Jeeli dana metoda nie jest na konkretnej
platformie obsugiwana, prba uruchomienia serwera spowoduje zapisanie w pliku
dziennika bdw odpowiedniego komunikatu i listy dostpnych metod szeregowania.
flock
Synchronizacja dostpu do pliku okrelonego wartoci dyrektywy LockFile realizowana jest za porednictwem systemowego wywoania flock().
fcntl
Synchronizacja dostpu do pliku okrelonego wartoci dyrektywy LockFile realizowana jest za porednictwem systemowego wywoania fcntl().
sysvsem
Synchronizacja dostpu do pliku realizowana jest przy uyciu semaforw zgodnych
ze specyfikacj System V.
pthread
Synchronizacja dostpu do pliku realizowana jest przy uyciu semaforw zgodnych
ze specyfikacj POSIX Threads (PThreads).

KeepAlive
KeepAlive liczba
Warto domylna: 5
Zastosowanie: konfiguracja gwna

Skoro dany uytkownik raz odwoa si do witryny, istniej spore szanse, e za chwil
uczyni to ponownie. Minimalizacj niepodanych opnie mona uzyska poprzez
podtrzymanie otwartego poczenia, jednak liczb odwoa w trakcie tak wyduonego
poczenia warto ograniczy, aby zapobiec nadmiernej konsumpcji zasobw serwera.
Ustalenie dopuszczalnej liczby odwoa realizowane jest za pomoc dyrektywy KeepAlive; warto domylna, rwna 5, moe zosta powikszona w przypadku, gdy struktura witryny zawiera wicej poziomw drzewa katalogw. Warto wspomnie, e przegldarka Netscape Navigator 2 zawieraa bd zakcajcy dziaanie podtrzymywania
pocze; poczwszy od wersji 1.2, Apache automatycznie wykrywa uycie tej przegldarki,
lokalizujc w nagwkach odebranych da cig Mozilla/2. Problem mona rwnie
wyeliminowa poprzez uycie dyrektywy BrowserMatch (zobacz rozdzia 13.).

KeepAliveTimeout
KeepAliveTimeout czas-w-sekundach
Warto domylna: 15
Zastosowanie: konfiguracja gwna

108

Rozdzia 3. Wielkie otwarcie

Dyrektywa ta pozwala na ograniczenie czasu oczekiwania na kolejne danie poprzez


okrelenie limitu czasu (w sekundach), przez ktry poczenie bdzie podtrzymywane
w stanie otwarcia. W chwili odebrania dania (przed upywem limitu) uaktywniona
zostaje dyrektywa TimeOut.

TimeOut
TimeOut czas-w-sekundach
Warto domylna: 3006
Zastosowanie: konfiguracja gwna

Dyrektywa ta okrela maksymaln dugo czasu transmisji pojedynczego bloku danych


w trakcie transakcji. We wczeniejszych wersjach Apache dyrektywa ta miaa do nieprzyjemne efekty uboczne, powodowaa bowiem bdy przeterminowania w przypadku
transmisji duych plikw czami o niewielkiej przepustowoci. W zwizku z tym tak
zmieniono jej dziaanie, by okrelaa nie maksymaln dugo trwania caej transakcji,
ale czas przeznaczony na przesanie pojedynczego bloku danych7.

HostNameLookups
HostNameLookups on|off|double
Warto domylna: off8
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalogi

Uaktywnienie tej dyrektywy poprzez uycie argumentu on powoduje, e kade odebrane


danie poddawane jest operacji odwrotnego odwzorowania adresu (ang. reverse DNS
resolution). Oznacza to, e wydzielony z dania adres IP klienta jest wykorzystywany
do ustalenia jego nazwy domenowej, pobieranej z odpowiedniego serwera DNS. Tak uzyskana nazwa domenowa jest nastpnie rejestrowana w plikach dziennikw. Wyczenie
dyrektywy (uycie argumentu off) powoduje uycie w tym miejscu adresu IP. Poniewa
procedura odwrotnego odwzorowania adresu potrafi by bardzo czasochonna, dla poprawy wydajnoci (zwaszcza w bardziej obcionych systemach) lepiej jest zablokowa
t funkcj, ustawiajc dyrektyw HostNameLookups na off. Warto tu wspomnie, i
pakiet Apache zawiera program narzdziowy o nazwie logresolve, pozwalajcy na dokonanie operacji odwrotnego rozwinicia adresw ju zapisanych w plikach dziennikw9.
Poczwszy od wersji 1.3, dyrektywa HostNameLookups moe rwnie przyjmowa
warto double. Jej uycie powoduje wykonanie dwukrotnego odwrotnego odwzorowania adresu (double reverse DNS lookup), czyli powtrnego przetworzenia na adres IP
6

W wersjach Apache wczeniejszych ni 1.2 warto ta wynosia 1200 sekund przyp. tum.

Ewentualnie pomidzy odebraniem kolejnych pakietw TCP przyp. tum.

W wersjach Apache wczeniejszych ni 1.3 warto ta wynosia on, o czym warto pamita
podczas aktualizacji serwera.

W przypadku adresw IP przydzielanych dynamicznie nie ma gwarancji, i ich odwrotne


odwzorowanie w terminie pniejszym pozwoli ustali nazw domenow, ktra faktycznie
odpowiadaa im w momencie poczenia. Jeli znajomo nazwy domenowej klienta jest istotna,
naley wczy dyrektyw HostNameLookups.

Pozostae dyrektywy

109

nazwy domenowej uzyskanej z odwzorowania DNS oryginalnego adresu. Zgodno obu


adresw oznacza pozytywny wynik testu. Niezalenie od ustawienia dyrektywy HostNameLookups, w przypadku implementacji kontroli dostpu poprzez modu mod_access
i listy dostpu, kady klient dajcy dostpu do zasobw serwera musi pomylnie
przej test dwukrotnego odwrotnego odwzorowania adresu.

Include
Include plik
Zastosowanie: konfiguracja gwna

Dyrektywa ta powoduje wstawienie zawartoci pliku w miejscu jej wystpienia w pliku konfiguracji serwera. Poczwszy od wersji 1.3.14, jeeli plik wskazuje katalog, do
pliku konfiguracyjnego wczana jest zawarto wszystkich plikw znajdujcych si
w katalogu i jego podkatalogach.

Limit
<Limit metoda1 metoda2 ...>
...
</Limit>

Dyrektywa blokowa <Limit metoda> definiuje blok zawierajcy dyrektywy adekwatne dla poszczeglnych metod nadchodzcych da HTTP. Przykadowo:
<Limit GET POST>
... dyrektywy ...
</Limit>

spowoduje ograniczenie zastosowania dyrektyw zdefiniowanych wewntrz bloku <Limit> do tych da, ktre odwoyway si do metod GET lub POST protokou HTTP.
Zwykle kontrola dostpu realizowana jest identycznie dla wszystkich metod protokou
HTTP. Jednak w oglnym przypadku dyrektywy kontroli dostpu nie powinno si
umieszcza wewntrz dyrektywy blokowej <Limit>.
Dyrektywa <Limit> suy gwnie do nakadania ogranicze zwizanych z kontrol
dostpu i wpywajcych na realizacj da zawierajcych wskazane w nagwku bloku
metody protokou HTTP. dania nie zawierajce wymienionych tam metod nie podlegaj adnym ograniczeniom. Ograniczenia zdefiniowane wewntrz dyrektywy grupowej
<Limit> nie wpywaj w aden sposb na realizacj da nie zawierajcych wskazanych metod. Poniszy przykad wyznacza sposb kontrolowania da POST, PUT i DELETE, nie wpywajc na obsug da odwoujcych si do pozostaych metod HTTP:
<Limit POST PUT DELETE>
Require valid-user
</Limit>

Nazwy metod, wymieniane w nagwku bloku <Limit>, musz nalee do zbioru GET,
POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH, MKCOL,
COPY, MOVE, LOCK i UNLOCK. Wielko liter w nazwie metody jest istotna. Wyspecyfikowanie w bloku <Limit> metody GET powoduje objcie restrykcjami dostpu zdefiniowanymi w tym bloku rwnie da HEAD.

110

Rozdzia 3. Wielkie otwarcie

Zasadniczo nie zaleca si stosowania dyrektywy <Limit>, jeli nie jest to bezwzgldnie
potrzebne (na przykad w przypadku, kiedy konfiguracja serwera obejmuje implementacj metody PUT, ktra jednak z oczywistych wzgldw powinna podlega cilejszym
ograniczeniom ni metoda GET) i obeszlimy si bez niej w przykadzie site.authent. Niestety, dostpna w sieci dokumentacja serwera Apache zachca do niewaciwego stosowania tej dyrektywy, wic jest ona czsto naduywana.

<LimitExcept>
<LimitExcept metoda1 metoda2 ...>
...
</LimitExcept>

Blok utworzony dyrektywami <LimitExcept> i </LimitExcept> suy do wydzielania tych dyrektyw kontroli dostpu, ktre stosowane bd wobec da zawierajcych
metody HTTP nie wymienione w nagwku bloku. Jest to dyrektywa komplementarna
wobec <Limit> i moe zawiera dyrektywy aplikowane zarwno do standardowych,
jak i niestandardowych (lub nierozpoznanych) metod. Patrz opis dyrektywy <Limit>.

LimitRequestBody
LimitRequestBody liczba-bajtw
Warto domylna: 0
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalog, pliki .htaccess

Za pomoc wartoci definiowanej w ramach dyrektywy LimitRequestBody moliwe


jest ograniczenie maksymalnego rozmiaru dania (0 oznacza brak limitu; maksymalna
dopuszczalna warto to 2 147 483 647). Warto domylna jest ustalana podczas kompilacji serwera za porednictwem staej DEFAULT_LIMIT_REQUEST_BODY.
Gwnym zastosowaniem tej dyrektywy jest ograniczanie maksymalnego rozmiaru komunikatu przekazywanego w ciele dania HTTP; ograniczenie realizowane jest wycznie w ramach kontekstu, w ktrym wystpuje dyrektywa (czyli w kontekcie serwera,
katalogu, pliku bd lokalizacji). Jeeli danie przekroczy ustalony rozmiar, serwer,
zamiast zrealizowa danie, odele do klienta komunikat z informacj o bdzie. Dopuszczalny rozmiar komunikatu jest uzaleniony gwnie od natury zasobu, do ktrego
odwouje si danie i metody zwizanej z obsug tego zasobu. Z ciaa komunikatu korzystaj intensywnie skrypty CGI, przekazujc do serwera informacje przesane w formularzu. Implementacje metody PUT wymagaj z kolei ustalenia limitu rozmiaru komunikatu na poziomie przewyszajcym rozmiar komunikatw zawierajcych zasoby
przesyane do serwera w ramach metody PUT.
Dyrektywa ta daje administratorowi serwera moliwo sterowania obsug ponadnormatywnych da klientw, co moe okaza si przydatne w unikaniu niektrych form
ataku odmowy obsugi.

LimitRequestFields
LimitRequestFields liczba
Warto domylna: 100
Zastosowanie: konfiguracja gwna

Pozostae dyrektywy

111

Liczba jest liczb cakowit, z zakresu od 0 (co oznacza brak ograniczenia) do 32


767.Warto domylna (100) ustalana jest podczas kompilacji za porednictwem staej
DEFAULT_REQUEST_LIMIT_FIELDS.
Dyrektywa LimitRequestFields daje administratorowi serwera WWW moliwo
sterowania maksymaln dopuszczaln liczb nagwkw w daniach HTTP. Oczywicie limit musi by wikszy od liczby nagwkw przesyanych przez zwykych klientw w czasie normalnej dziaalnoci witryny. W praktyce liczba ta rzadko przekracza 20,
ale moe by wiksza i zaley gwnie od implementacji przegldarki oraz od stopnia
dostosowania jej przez uytkownika do wasnych wymaga i zwizan z tym obsug
negocjacji zawartoci komunikatw HTTP. Za pomoc pl nagwka protokou HTTP
okrelane s te czsto najrniejsze rozszerzenia protokou.
Administrator serwera moe za porednictwem tej dyrektywy kontrolowa obsug ponadnormatywnych da klientw, w tym da nadsyanych w ramach ataku odmowy
obsugi. W razie otrzymywania od zwykych uytkownikw sygnaw o pojawianiu si
w przegldarce komunikatw informujcych o zbyt duej liczbie pl w daniu, warto
LimitRequestFields powinna zosta zwikszona.

LimitRequestFieldSize
LimitRequestFieldSize liczba-bajtw
Warto domylna: 8190
Zastosowanie: konfiguracja gwna

Dyrektywa ta okrela maksymalny rozmiar pojedynczego pola nagwka dania HTTP


jako liczb-bajtw z zakresu od 0 do wartoci ustalonej podczas kompilacji (za porednictwem staej DEFAULT_LIMIT_REQUEST_FIELD_SIZE).
Administrator serwera WWW moe za pomoc tej dyrektywy zmniejszy dopuszczalny
rozmiar pl nagwka da HTTP napywajcych do serwera tak, aby ich rozmiar by
mniejszy od rozmiaru bufora wejciowego, ktrego wielko jest ustalana na etapie kompilacji. Warto ta nie moe by zbyt maa, aby moliwa bya poprawna obsuga zwykych da HTTP przesyanych do serwera w ramach normalnych odwiedzin witryny.
Rozmiar pl nagwkw dania HTTP zaley gwnie od implementacji przegldarki,
w tym od stopnia jej dostosowania do potrzeb uytkownika w sensie intensywnoci korzystania z funkcji negocjacji protokou HTTP.
Dyrektywa ta daje administratorowi serwera moliwo sterowania obsug ponadnormatywnych da klientw, co moe okaza si przydatne w zapobieganiu niektrym
formom ataku odmowy obsugi. W normalnych warunkach nie ma potrzeby zmiany
wartoci domylnej.

LimitRequestLine
LimitRequestLine liczba-bajtw
Warto domylna: 8190
Zastosowanie: konfiguracja gwna

112

Rozdzia 3. Wielkie otwarcie

Liczba-bajtw jest liczb cakowit, z zakresu od 0 (co oznacza brak ograniczenia) do


8 190 (warto ta jest ustalana podczas kompilacji na podstawie wartoci staej DEFAULT_LIMIT_REQUEST_LINE i wynosi zwykle 8 190).
Dyrektywa LimitRequestFields daje administratorowi serwera WWW sposobno
ograniczenia maksymalnego dopuszczalnego rozmiaru poszczeglnych wierszy dania
HTTP. Rozmiar ten powinien by dostosowany do rozmiaru bufora wejciowego serwera. Wiersze dania zawieraj metod HTTP, URI i numer protokou, dyrektywa LimitRequestLine ma oczywicie na celu ograniczenie rozmiaru URI przekazywanego do
serwera. Warto ta musi by na tyle dua, aby serwer nie odrzuca poprawnych da
odwoujcych si do udostpnianych przez serwer zasobw, przy uwzgldnieniu narzutu
rozmiaru identyfikatora URI zwizanego z przechowywaniem parametrw metody GET.
Administrator serwera moe za porednictwem tej dyrektywy kontrolowa obsug ponadnormatywnych da klientw, w tym da nadsyanych w ramach ataku odmowy
obsugi. W normalnych warunkach nie ma potrzeby modyfikowania wartoci domylnej.

Nagwki odpowiedzi HTTP


Administrator serwera WWW moe samodzielnie ustawia tre nagwkw HTTP odpowiedzi odsyanych klientom, tak aby przystosowa dziaanie serwera do specjalnych
warunkw dziaania witryny, udostpni metainformacje wyszukiwarkom i robotom
indeksujcym oraz przekazywa etykiety klasyfikujce standardu PICS. Warto jednak
pamita, e Apache nie sprawdza poprawnoci i zasadnoci okrelonych w ten sposb
nagwkw, dlatego kadorazowo konieczne jest samodzielne upewnienie si, czy dany
nagwek nie powoduje czasem u klienta niespodziewanych i niepodanych efektw.

Header
Header set|append|add nagwek "warto"
Header unset nagwek
Zastosowanie: konfiguracja gwna, serwery wirtualne, pliki access.conf
i .htaccess

Dyrektywa ta pozwala na zastpienie, doczenie bd usunicie nagwkw HTTP odpowiedzi serwera. Rodzaj dziaania w stosunku do nagwka jest okrelany pierwszym
parametrem dyrektywy. Moe on przyj jedn z nastpujcych wartoci:
set
Nagwek odpowiedzi jest ustawiany. Jeli wczeniej zdefiniowany zosta nagwek
o identycznej nazwie, zostanie on zastpiony nagwkiem definiowanym bieco.
append
Warto nagwka odpowiedzi jest doczana do wartoci nagwka o tej samej nazwie
zdefiniowanego wczeniej. Nowa warto oddzielana jest od poprzedniej przecinkiem.
Jest to standardowa metoda definiowania wielowartociowych nagwkw HTTP.

Nagwki odpowiedzi HTTP

113

add
Nagwek odpowiedzi jest dodawany do istniejcego zbioru nagwkw, nawet jeli
nagwek o tej samej nazwie ju wystpuje w zbiorze nagwkw. Tak wic w wyniku stosowania tej opcji moliwe jest utworzenie odpowiedzi zawierajcej kilka identycznych nagwkw o rnych wartociach. Konsekwencje interpretacji takiej odpowiedzi przez klienta s nieokrelone, dlatego zaleca si stosowanie zamiast opcji
add opcji append.
unset
Nagwek odpowiedzi o wskazanej nazwie jest usuwany z odpowiedzi. Jeli w odpowiedzi zdefiniowano kilka nagwkw o tej samej nazwie, kady z nich zostanie
usunity ze zbioru nagwkw odpowiedzi.
Po opcji definiujcej rodzaj operacji na zbiorze nagwkw podawana jest nazwa nagwka (moe ona zawiera tradycyjny znak dwukropka, ale nie jest to wymagane). Wielko liter parametrw dyrektywy nie ma znaczenia. W przypadku opcji add, append
i set wymagane jest okrelenie trzeciego parametru, interpretowanego jako warto nagwka. Jeli warto ta zawiera znaki spacji, powinna zosta ujta w znaki cudzysowu.
Nie mona poda wartoci nagwka w przypadku opcji unset.
Kolejno przetwarzania
Dyrektywa Header moe by definiowana w niemal dowolnym miejscu pliku konfiguracyjnego, zarwno w kontekcie konfiguracji gwnej, w blokach dyrektyw dla serwerw wirtualnych, wewntrz blokw <Directory>, <Location> i <Files> oraz wewntrz plikw .htaccess.
Kolejno przetwarzania dyrektyw Header jest nastpujca:
konfiguracja gwna;
serwer wirtualny;
bloki <Directory> i pliki .htaccess;
<Location>;
<Files>.
Istotna jest kolejno wystpowania dyrektyw. Poniszy przykad ilustruje zniesienie
zdefiniowanej wczeniej dyrektywy:
Header append Author "Jan Nowak"
Header unset Author

Efektem przetworzenia obu dyrektyw jest usunicie ze zbioru nagwkw odpowiedzi


nagwka Author:. Gdyby zamieni dyrektywy miejscami, zbir nagwkw odpowiedzi
zawieraby nagwek Author: o wartoci "Jan Nowak".

114

Rozdzia 3. Wielkie otwarcie

Dyrektywy Header s jeszcze przed wysaniem odpowiedzi przetwarzane przez przypisane do nich procedury obsugi. Oznacza to, e niektre z nagwkw, dodane bezporednio przed odesaniem odpowiedzi do klienta, nie mog zosta usunite czy nadpisane. Dotyczy to midzy innymi nagwkw Date: i Server:.

Options
Options opcja opcja ...
Warto domylna: All
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalogi, pliki
.htaccess

Dyrektywa Options ma niezwykle szerokie zastosowanie i nie daje si przypisa do


pojedynczego kontekstu, dlatego zostanie omwiona szerzej ni inne. Administrator WWW
dysponuje za porednictwem dyrektywy Options daleko idc kontrol nad moliwociami, jakimi dysponowa bd waciciele poszczeglnych witryn obsugiwanych
przez serwer. Parametry opcja mog zosta zastpione pojedynczym cigiem None, co
spowoduje zablokowanie wszelkich dodatkowych funkcji serwera, mog te przyj
jedn z nastpujcych wartoci:
All
Uaktywnione zostan wszystkie opcje serwera z wyjtkiem opcji MultiViews (dla
zachowania zgodnoci z wersjami wczeniejszymi).
ExecCGI
Brak okrelenia tej opcji uniemoliwia wykonywanie skryptw CGI.
FollowSymLinks
Okrelenie tej opcji pozwala serwerowi rozwija dowizania symboliczne znajdujce
si w danym katalogu.
Rozwijanie przez serwer dowiza symbolicznych nie wycza plikw, do ktrych
klient odwouje si za porednictwem dowiza, spod rygorw dyrektyw
zdefiniowanych w bloku <Directory>, jeli wyraenie zdefiniowane w nagwku
tego bloku obejmuje katalog, w ktrym znajduj si te dowizania. Wewntrz
sekcji <Location> opcja ta jest ignorowana.

Includes
Brak okrelenia tej opcji uniemoliwia przetwarzanie przez serwer polece wstawianych SSI.
IncludesNOEXEC
Okrelenie tej opcji oznacza przyzwolenie na przetwarzanie polece wstawianych,
z wyjtkiem polece exec i include w odniesieniu do skryptw CGI.
Indexes
Jeeli klient odwoa si w daniu do URL-a, ktry zostanie odwzorowany do katalogu, w ktrym nie ma pliku index.html, okrelenie tej opcji pozwoli na zastosowanie zestawu polece indeksowania zwracajcych sformatowany wydruk zawartoci katalogu.

Nagwki odpowiedzi HTTP

115

MultiViews
Uaktywnia obsug wielowidokowej treci dokumentw. Negocjacja zawartoci dokumentw obejmuje m.in. wybr wersji jzykowej (dyrektywa AddLanguage) i formatu plikw graficznych. Szersze omwienie tego tematu zawiera rozdzia 6.
SymLinksIfOwnerMatch
Serwer korzysta z rozwini dowiza symbolicznych wycznie w przypadku, kiedy
plik uzyskany po rozwiniciu dowizania naley do uytkownika, do ktrego naley
rwnie samo dowizanie.
Opcja ta jest ignorowana wewntrz bloku <Location>.

Poszczeglne opcje mog by poprzedzane znakami (+) lub (-), oznaczajcymi odpowiednio: uaktywnienie bd zablokowanie opcji. Zgodnie z tym, ponisza dyrektywa
spowoduje uaktywnienie indeksowania, ale zablokuje moliwo wykonywania skryptw CGI:
Options +Indexes -ExecCGI

Jeli w dyrektywie nie zostan okrelone adne opcje, dyrektywa jest interpretowana
tak, jakby towarzyszy jej specyfikator All (co jednak nie oznacza uaktywnienia funkcji
MultiViews). Okrelenie dowolnej opcji znosi domylne zaoenie specyfikatora All.
Powoduje to przynajmniej jeden, niepodany efekt, ktry zademonstrujemy na przykadzie pliku /site.options. Ilustracja tego efektu wymaga te nieznacznej modyfikacji
skryptu go. Jego nowa zawarto to:
test -d logs || mkdir logs
httpd -f 'pwd'/conf/httpd$1.conf -d'pwd'

Zamy, e w katalogu /htdocs znajduje si katalog pozbawiony pliku index.html


i prosty plik konfiguracyjny serwera o nastpujcej zawartoci:
User webuser
Group webgroup
ServerName www.butterthlies.com.pl
DocumentRoot /usr/www/APACHE3/site.options/htdocs

Po uruchomieniu serwera (jak zwykle poleceniem ./go) i odwoaniu si do niego za


porednictwem przegldarki WWW zobaczymy indeks katalogu /htdocs. Jeli teraz
skopiujemy plik konfiguracyjny do pliku /conf/httpd1.conf i dodamy do niego wiersz:
Options ExecCGI

przeadujmy serwer, zatrzymujc go i ponownie uruchamiajc za porednictwem polecenia ./go 1. Po ponownym odwoaniu si do katalogu w oknie przegldarki pojawi
si do nieprzyjemny komunikat:
FORBIDDEN
You dont have permissions to access / on this serwer

116

Rozdzia 3. Wielkie otwarcie

(lub podobny; jego tre uzaleniona jest od konfiguracji przegldarki). Przyczyn odmowy obsugi dania jest to, e kiedy w pliku konfiguracyjnym nie okreli si dyrektywy Options, domylnie przyjmowana jest dyrektywa Options All. Natomiast po
jawnym zadeklarowaniu opcji ExecCGI wszelkie pozostae opcje zostay po zniesieniu
dyrektywy domylnej zablokowane. Naley wtedy zmieni tre pliku konfiguracyjnego
(/conf/httpd2.conf) tak, aby zawiera wiersz:
Options +ExecCGI

Jeeli okreleniu opcji nie towarzyszy znak (+) lub (-) i w pliku zadeklarowanych jest
kilka dyrektyw, serwer bierze pod uwag ostatni. Przykadowo (/conf/httpd3.conf):
Options ExecCGI
Options Indexes

spowoduje uaktywnienie tylko opcji Indexes. Skrypty CGI nie bd dziaa, cho przyczyna tego stanu rzeczy nie jest dla pocztkujcych administratorw oczywista. Podobny efekt wystpuje te przy wielokrotnym definiowaniu dyrektywy Options w osobnych blokach <Directory>:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/specs>
Options Includes
</Directory>

Dla katalogu /web/docs/spec aktywna bdzie wycznie opcja Includes.

Opcje FollowSymLinks, SymLinksIfOwnerMatch


Kiedy wczeniej w tym rozdziale, kierujc si oszczdnoci przestrzeni dyskowej, zdecydowalimy, e zasoby witryny (pliki zdj bench.jpg, hen.jpg, bath.jpg i tree.jpg) przechowywane bd w katalogu /usr/www/APACHE3/main_docs, a poszczeglne kopie witryny korzysta bd z dowiza do tych plikw, mwilimy o dowizaniach twardych
(ang. hard links). Korzystanie z takich dowiza nie zawsze jest jednak najlepszym pomysem, poniewa po usuniciu pliku, do ktrego odwoyway si dowizania i utworzeniu jego nowej wersji, dowizania twarde nie bd wskazywa nowej wersji pliku.
Inaczej jest w przypadku dowizania symbolicznego takie dowizanie odwoywaoby
si do nowej wersji pliku. Dowizanie symboliczne tworzone jest poleceniem ln z opcj
-s, wedug szablonu ln -s nazwa-dowizania nazwa-pliku-docelowego.
Jednake rozwizanie to nie jest pozbawione wad, naraa bowiem bezpieczestwo plikw rnych uytkownikw tego samego systemu. W kadym stadzie znajdzie si czarna owca; serwer WWW nie jest tu wyjtkiem i atwo sobie wyobrazi, e jednym z jego
uytkownikw jest podstpny Bolek dysponujcy wasn przestrzeni WWW, a w niej
plikiem /bolek/public.html. Zamy, e administrator serwera WWW utworzy skrypt
CGI o nazwie fido przechowywany w /cgi-bin i nalecy do uytkownika webuser. Jeli
administrator troszczy si o bezpieczestwo serwera, powinien tak ustawi uprawnienia
dostpu do skryptu, aby nie mg go czyta ani uruchamia aden z uytkownikw

Restart serwera

117

systemu z wyjtkiem uytkownika webuser. Oczywicie klienci korzystajcy z serwera


mog korzysta z pliku, gdy odwouj si do niego za porednictwem procesu roboczego serwera, rwnie nalecego do uytkownika webuser. Wydaje si, e Bolek nie
moe odczyta zawartoci z pliku. Taki stan wydaje si wic zgodny z polityk bezpieczestwa serwera, wedug ktrej naley ogranicza krg uytkownikw majcych dostp do skryptw CGI. Zmniejsza to ryzyko wykorzystania przez zoliwych uytkownikw wiedzy o lukach w tych skryptach.
Niemniej jednak Bolek moe podstpnie wykona dowizanie symboliczne do skryptu
fido z wasnej przestrzeni WWW. Co prawda z poziomu powoki systemowej nadal nie
bdzie mg odczyta zawartoci pliku, ale moe si do niego dobra za porednictwem
serwera WWW i wasnej przestrzeni WWW.
Dyrektywa Options bez specyfikatorw All i FollowSymLinks uniemoliwia ten
proceder. Administrator WWW moe jednak dopuci korzystanie z dowiza symbolicznych (co pozwala zaoszczdzi przestrze dyskow), pod warunkiem, e wacicielem pliku docelowego i dowizania jest ten sam uytkownik, za porednictwem opcji
SymLinksIfOwnerMatch.

Restart serwera
Niekiedy zachodzi potrzeba zatrzymania serwera Apache i ponownego jego uruchomienia z uwzgldnieniem nowej zawartoci pliku konfiguracji, zwykle po dodaniu do niego
definicji nowego serwera wirtualnego lub te po takiego serwera usuniciu. Oczywicie
restart mona wykona metod siow, unicestwiajc proces gwny serwera poleceniem
kill <PID> i ponownie uruchamiajc serwer. Tyle e wszelkie realizowane w tym czasie transakcje zostan zerwane, co moe nieco poirytowa zalogowanych i korzystajcych z witryn uytkownikw. Ostatnie wersje Apache pozwalaj na bardziej eleganckie
przeadowanie serwera gwnego bez gwatownego wyrzucenia z systemu procesw
potomnych zajtych obsug da.
W systemie Unix serwer Apache moe zosta przeadowany na trzy sposoby (patrz te
rozdzia 2.):
Unicestwienie procesu gwnego serwera i uruchomienie go z uwzgldnieniem
nowej wersji pliku konfiguracyjnego:
% kill PID
% httpd [opcje]

Przesanie do procesu serwera gwnego sygnau -HUP:


% kill -HUP PID

agodny restart przez przesanie do procesu serwera sygnau -USR1. Reakcj serwera
na otrzymanie takiego sygnau jest ponowny odczyt pliku konfiguracyjnego przy
umoliwieniu procesom potomnym dokoczenia realizowanych aktualnie da
i transakcji. Po zakoczeniu transakcji proces potomny zastpowany jest nowym

118

Rozdzia 3. Wielkie otwarcie

egzemplarzem procesu roboczego serwera, uwzgldniajcym ow konfiguracj.


Procedura ta jest odpowiednia w wikszoci przypadkw, poniewa jest mao
odczuwalna dla klientw serwera (o ile nowy plik konfiguracyjny nie zawiera bdw):
% kill -USR1 PID

Skrypt realizujcy eleganck procedur przeadowania, przeznaczony


do wywoywania z katalogu gwnego serwera, miaby nastpujc posta:
#!/bin/sh
kill -USR1 'cat logs/httpd.pid'

W systemach z rodziny Windows agodny restart mona wykona, otwierajc okno


wiersza polece DOS i wpisujc:
> apache -k restart

Wicej informacji na temat uruchamiania i zatrzymywania procesw serwera znajdziesz


w rozdziale 2.

Pliki .htaccess
Metod alternatywn w stosunku do modyfikowania pliku konfiguracyjnego serwera
i jego przeadowywania jest mechanizm wykorzystujcy pliki .htaccess, omwiony szerzej w rozdziale 5. Polega on na przechowywaniu czci konfiguracji serwera (tej, ktra
ulega najczstszym zmianom) w osobnym pliku, znajdujcym si w katalogu /htdocs.
W przeciwiestwie bowiem do gwnego pliku konfiguracyjnego, plik .htaccess jest odczytywany przez serwer nie podczas uruchamiania, ale kadorazowo w ramach obsugi
dania do danej witryny. Zalet tego podejcia jest elastyczno konfiguracji administrator moe modyfikowa dziaanie serwera w dowolnym momencie, bez przerywania
jego pracy. Wad jest znaczny spadek wydajnoci serwera przetwarzanie pliku konfiguracji dla kadego dania musi spowodowa wyduenie jego obsugi. Dlatego administrator moe ograniczy zmiany wprowadzane przez wacicieli witryn do ich plikw
.htaccess, deklarujc w gwnym pliku konfiguracyjnym dyrektyw AllowOverride.
Administrator moe rwnie uniemoliwi klientom podgld ich wasnych plikw
.htacces. Mona to osign, wprowadzajc do pliku konfiguracyjnego serwera nastpujce wiersze:
<Files .htaccess>
order allow,deny
deny from all
</Files>

Metapliki w standardzie CERN


Metaplik (ang. metafile) to plik zawierajcy dodatkowe nagwki przesyane wraz z plikiem transmitowanym przez serwer w odpowiedzi HTTP. Moe on zawiera, na przykad, nagwek Refresh:. Jako e omwienie tego mechanizmu trudno wpasowa

Okrelanie terminu wanoci dokumentu

119

w tematyk pozostaych rozdziaw ksiki, zdecydowalimy si zamieci je tu, w rozdziale omawiajcym podstawowe aspekty konfiguracji.

MetaFiles
MetaFiles on|off
Warto domylna: off
Zastosowanie: katalog

Wcza (lub wycza) przetwarzanie metaplikw dla danego katalogu.

MetaDir
MetaDir nazwa-katalogu
Warto domylna: .web
Zastosowanie: katalog

Warto tej dyrektywy okrela katalog, w ktrym serwer Apache bdzie szuka metaplikw. Jest to zwykle katalog ukryty (jego nazwa zaczyna si znakiem kropki), bdcy
podkatalogiem katalogu, w ktrym przechowywany jest udostpniany dokument.
Ustawienie dyrektywy MetaDir na pojedyncz kropk (.) spowoduje poszukiwanie
metapliku w katalogu dokumentu.

MetaSuffix
MetaSuffix rozszerzenie
Warto domylna: .meta
Zastosowanie: katalog

Warto tej dyrektywy definiuje rozszerzenie, jakie powinien nosi plik zawierajcy
metainformacje.
Jeeli pozostawiona zostanie warto domylna dyrektywy MetaSuffix, danie odwoujce si do pliku /mj-katalog/bolek.html bdzie przetworzone z wykorzystaniem
metainformacji przechowywanych w pliku /mj-katalog/bolek.html.meta.

Okrelanie terminu wanoci dokumentu


Poczwszy od wersji 1.2 Apache, do gwnej dystrybucji serwera doczany jest modu
mod_expires. Modu ten pozwala wacicielowi witryny na wprowadzenie do odpowiedzi
serwera nagwkw przekazujcych informacje o terminie wanoci danej strony; przegldarka moe na podstawie wartoci takich nagwkw zdecydowa o powtrnym zaadowaniu strony w okrelonym czasie lub, jeli termin wanoci jest dugi, o umieszczeniu strony w buforze lokalnym. Modu wykorzystuje mod_expires wykorzystuje trzy dyrektywy:

ExpiresActive
ExpiresActive on|off
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalogi, pliki .htaccess

120

Rozdzia 3. Wielkie otwarcie

Dyrektywa ta suy do uaktywniania i blokowania mechanizmu przedawnie.

ExpiresByType
ExpiresByType typ-mime czas
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalogi, pliki .htaccess

Dyrektywa ExpiresByType przyjmuje dwa parametry. Parametr typ-mime okrela


typ MIME pliku. Parametr czas suy natomiast do okrelenia okresu, w przecigu ktrego pliki danego typu MIME pozostaj aktualne. Drugi parametr zapisywany jest przy
uyciu jednej z dwch skadni. Pierwsza:
kod liczba-sekund

Pomidzy kodem a liczb sekund nie ma spacji. Kod moe przyj jedn z dwch wartoci:
A oznacza czas dostpu (czyli moment, w ktrym obsugiwane jest danie),
M oznacza czas ostatniej modyfikacji pliku.
liczba-sekund jest zwyk liczb cakowit. Przykadowo, aby okreli termin wanoci
danego typu MIME jako 565 656 sekund od momentu odwoania si do takiego pliku,
parametr czas dyrektywy naley okreli nastpujco:
A565656

Druga, bardziej czytelna skadnia parametru czas to:


baza [plus] liczba typ [liczba typ] ...

Baza moe przyj jedn z trzech wartoci:


access
Moment dostpu.
now
Synonim dla access.
modification
Moment ostatniej modyfikacji pliku.
Sowo kluczowe plus jest opcjonalne. Jako typ naley podstawi jeden z poniszych
specyfikatorw:
year[s] (lata)
month[s] (miesice)
week[s] (tygodnie)
day[s] (dni)
hour[s] (godziny)
minute[s] (minuty)
second[s] (sekundy)

Okrelanie terminu wanoci dokumentu

121

Przykad parametru czas dyrektywy ExpiresByType, okrelajcego termin wanoci


na 1 dzie i 4 godziny:
now plus 1 day 4 hours

ExpiresDefault
ExpiresDefault czas
Zastosowanie: konfiguracja gwna, serwery wirtualne, katalogi, pliki .htaccess

Dyrektywa ta ustanawia domylny termin wanoci plikw stosowany dla dokumentw, ktrych terminu wanoci nie okrelono za pomoc dyrektywy ExpireByType.

Vous aimerez peut-être aussi