KONFIGURACJA SERWERA WWW (APACHE)
Konfiguracja pracy serwera polega na uaktywnianiu pewnych dyrektyw, które w zasadzie są poleceniami ustawiającymi konkretną opcję.
Dyrektywy konfiguracyjne mają zazwyczaj taką samą składnię :
dyrektywa opcja opcja ...
W jednej linii można umieścić tylko jedną dyrektywę.
Dzięki dyrektywom można określać złożone opcje lub ustawić tylko konkretną wartość.
Niektóre dyrektywy zwane sekcjami mają budowę typu :
<dyrektywa opcja>
dyrektywa opcja opcja
dyrektywa opcja opcja
</dyrektywa>
Głównym i najważniejszym plikiem konfiguracyjnym serwera jest plik httpd.conf.
W pliku tym możemy umieścić wszystkie dyrektywy potrzebne do prawidłowego działania serwera.
Najważniejsze dyrektywy konfiguracyjne to :
ResourceConfig /dev/null
AccessConfig /dev/null
W pierwszych wersjach serwera dyrektywy konfiguracyjne były umieszczane dodatkowo w dwóch plikach : srm.conf i acces.conf . Dyrektywy te nakazują serwerowi zignorowanie tych plików, gdyż cała konfiguracja serwera zawarta jest w jednym pliku : httpd.conf .
ServerType
Dzięki tej dyrektywie można ustawić dwa typy pracy naszego serwera : standalone, inetd .
Ustawienie typu serwera na standalone spowoduje, że nasz serwer będzie utrzymywany przez system przez cały czas w gotowości do obsłużenia każdej prośby.
Opcja inetd spowoduje, że w reakcji na pojawiającą się prośbę zostanie uruchomiony oddzielny serwer i po jej obsłużeniu zostanie wyłączony.
ServerRoot
Dyrektywa ta określa najwyższy katalog drzewa katalogów, względem którego określane będą lokalizacje plików konfiguracyjnych i dzienników.
Port
Wskazujemy port, na którym nasz serwer będzie prowadził nasłuchiwania.
Domyślnie przyjmowanym portem jest port 80.
Listen
Możemy dokonać powiązania z określonym portem (lub adresem IP), na którym serwer będzie prowadził nasłuchiwanie.
User
Group
Dyrektywa ta wskazuje na użytkownika i grupę, których własnością będzie proces httpd .
Przed ustawieniem tych opcji należy upewnić się, że podany użytkownik i grupa posiadają wpisy w plikach passwd i group.
Należy być świadomym tego, że nasz serwer będzie pracował z prawami podanego użytkownika i grupy co oznacza, że w przypadku włamania do systemu poprzez serwer lub jeden z programów CGI włamywacze dostaną właśnie te prawa.
ServerAdmin
Opcja ta powinna wskazywać na adres internetowy administratora serwera.
ServerName
Opcją tą ustalamy nazwę serwera zwracaną klientowi, jeśli rożni się ona od nazwy podanej w zadaniu . Nazwa ta musi być zgodna z nazwą podaną na serwerze DNS.
StartServers
Dyrektywą tą określamy liczbę serwerów uruchamianych podczas startu Apache.
MaxClients
Jest to maksymalna liczba klientów, którzy mogą być obsłużeni w tym samym czasie.
Jeśli limit ten zostanie przekroczony, to obsługa nadmiarowych klientów będzie wstrzymana, co umożliwia ochronę systemu przed załamaniem w wyniku przeciążenia serwera.
MinSpareServers
MaxSpareServers
Dyrektywy te regulują liczbę zapasowych procesów potomnych serwera - aby serwer mógł dynamicznie dostosować się do obciążenia.
Oznacza to, że serwer utrzymuje potrzebną liczbę procesów do obsłużenia połączeń i kilka dodatkowych do obsługi gwałtownego wzrostu obciążenia.
Osiąga się to przez okresowe sprawdzanie liczby serwerów, oczekujących na wywołanie, i jeśli liczba ta jest mniejsza niż MinSpareServers, to dodaje zapasowe, a jeśli wolnych serwerów jest więcej niż MaxSpareServers, to część z nich jest likwidowana.
Timeout
Opcją tą określamy limit czasu przeznaczony na obsługę pojedyńczego żądania.
KeepAlive
Dyrektywą tą możemy zezwolić na obsługę wielu zadań w ramach jednego połączenia.
MaxKeepAliveRequests
Określamy maksymalną liczbę zadań w ramach jednego połączenia.
KeepAliveTimeout
Określamy czas oczekiwania na kolejne zadanie w ramach tego samego połączenia.
MaxRequestsPerChild
Dyrektywą tą możemy określić maksymalna liczbę żądań obsługiwanych w cyklu życia procesu potomnego.
UseCanonicalName
Włączenie tej opcji nakazuje serwerowi, by w przypadku odwołań wskazujących na siebie tworzył adres URL na podstawie wartości z ServerName i Port.
Jeśli opcja ta jest wyłączona, adresy URL tworzone są na podstawie nazwy hosta i numeru portu pobranego z żądania.
DocumentRoot
Dyrektywa ta powinna zawierać ścieżkę do katalogu zawierającego katalog główny serwisu WWW, skąd będą pobierane dokumenty do wysłania klientowi.
Zawartość tego katalogu używana jest domyślnie do obsługi wszelkich zadań.
UserDir
Dyrektywa ta określa podkatalog katalogu macierzystego użytkownika w przypadku odwołania do adresu zawierającego ciąg ~użytkownik, w którym może on umieszczać publiczne dokumenty HTML .
DirectoryIndex
W dyrektywie tej znajdują się nazwa pliku lub plików zawierających indeks katalogu, czyli pliki, które zostaną wysłane użytkownikowi w odpowiedzi na żądanie dostępu do adresu.
IndexIgnore
Umożliwia określenie nazwy plików, które będą ignorowane podczas indeksowania katalogu.
FancyIndexing
Dyrektywa ta umożliwia włączenie dodatkowych opcji indeksowania katalogów.
AddIconByType
AddIcon
Opcją tą informujemy serwer, które ikony będą reprezentowały pliki o określonych typach lub rozszerzeniach.
Ikony wyświetlane są gdy włączymy - FancyIndexind.
DefaultIcon
Opcja ta określa domyślną ikonę dla plików, którym nie przypisano jej jawnie poprzez ustawieni opcji w AddIconByType i AddIcon.
LoadModule
AddModule
Aby móc używać modułów skompilowanych jako DSO, należy je załadować, a następnie dodać do serwera. Kolejność ładowania modułów jest istotna.
ReadmeName
HeaderName
Dyrektywy te określają nazwy plików zawierających stopkę i nagłówek dołączony na końcu i początku indeksu katalogu.
ScriptAlias
Opcja ta określa, w którym katalogu będą znajdować się skrypty serwera (zawartość katalogu traktowana jest, jako aplikacje).
AddHandler cgi-script .cgi
Opcja zezwalająca na używanie skryptów CGI.
AddHandler server-parsed .shtml
Opcja zezwalająca na używanie poleceń SSI w dokumentach HTML.
AddHandler send-as-is asis
Zezwalamy serwerowi na przesyłanie dokumentów w postaci niezmodyfikowanej.
AddHandler imap-file map
Zezwalamy na używanie map graficznych, interpretowanych po stronie serwera.
AddHandler type-map var
Zezwalamy na wykorzystywanie map typów.
TypesConfig
Dyrektywa ta służy do wskazywania lokalizacji plików: mime types.
DefaultType
Wskazujemy domyślny typ MIME używany w przypadku niemożności jego określenia.
Jeśli serwer przechowuje głównie dokumenty tekstowe HTML, to najlepiej użyć wartości "text/plain", jeśli natomiast udostępniane pliki są w większości binarne, to lepiej użyć "aplication/octet-stream", co pozwoli zabezpieczyć przeglądarki przed próbami wyświetlania zawartości plików binarnych w postaci tekstowej.
AddType
Pozwala na dodanie nowego typy MIME bez konieczności modyfikowania pliku mime types.
AddLanguage
Dyrektywa ta pozwala na obsługę wielu wersji językowych dokumentów, co pozwoli na dostarczenie przeglądarce dokumentu w żądanym przez nią języku.
LanguagePriority
Określa priorytet wersji językowej w przypadku braku rozstrzygnięcia podczas negocjacji zawartości. Lista powinna zawierać kody języków w kolejności malejących priorytetów.
AddEncoding
Dyrektywa ta daje możliwość przeglądarkom na rozpakowywanie danych w locie.
AccessFileName
Opcją tą wskazujemy na plik odpowiedzialny za ustawienie kontroli dostępu do katalogu.
ProxyRequests
Dyrektywą tą ustawiamy nasz serwer, jako serwer pośredniczący.
Alias /alias/ "/prawdziwa nazwa/"
Dyrektywa ta umożliwia nam zdefiniowanie dowolnej liczby aliasów dla katalogów.
Zawartość katalogu określonego za pomocą tej dyrektywy traktowana jest, jak dokument, a nie aplikacja.
ErrorLog
Określenie położenia pliku dziennika błędów.
LogLevel
Dyrektywa ta ustala ilość informacji rejestrowanych w pliku error_log.
Możliwe opcje tej dyrektywy to : debug, info, notice, warn, error, critic, alert, emerq.
CustomLog
Określamy położenie pliku dziennika transakcji : rejestrowanie informacji o typie przeglądarki i adresie źródłowym odwołania.
LogFormat
Dzięki tej opcji możemy ustalić wzorce formatów dla dyrektywy CustomLog.
HostnameLookups
Dzięki tej dyrektywie możemy nakazać serwerowi, aby rejestrował nazwy klientów (on) lub tylko ich adresy (off).
PidFile
Dyrektywa ta zawiera nazwę pliku, do którego serwer podczas startu zapisze swój PID.
ScoreBoardFile
Określa plik do zapisywania wewnętrznych informacji o procesach potomnych serwera.
ErrorDocument
Ta dyrektyw może zawierać komunikaty o błędach serwera. Jako opcja może być również podany adres strony, która wyświetli informacje o błędzie.
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response
Opcje te ustawiają blokadę podtrzymywania połączenia w przypadku komunikacji z przeglądarką Netscape 2.x (implementacja ta zawiera błędy).
Druga dyrektywa przeznaczona jest dla programu Internet Explorer 4.0b2, który posiada błędy w obsłudze podtrzymywania połączenia po otrzymaniu odpowiedzi 301,302.
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
Powyższe dyrektywy wymuszają wysyłanie odpowiedzi w protokole HTTP/1.1 opatrzonych
nagłówkiem HTTP/1.0 na użytek przeglądarek niewłaściwie interpretujących dane w tym protokole.
Dla każdego katalogu i jego podgatalogów, do którego Apache ma dostęp można określić zestaw dostępnych w nim praw, usług i funkcji. Służy do tego sekcja :
<Directory / katalog_do_którego_będą_odnosić_się_ustawienia>
dyrektywy
</Directory>
składająca się z następujących dyrektyw :
Options - dyrektywa ta może przyjmować następujące opcje:
None - żadna z dostępnych opcji nie zostanie włączona w tym katalogu
All - wszystkie dostępne opcje (poza MultiViews) są włączone w tym katalogu
Indexes - w przypadku braku pliku podanego dyrektywą DirectoryIndex zostanie wyświetlona lista plików w tym katalogu (w postaci strony HTML)
FollowSymLinks - pozwala na dostęp do katalogu poprzez dowiązania symboliczne
ExecCgi - daje możliwość wykonywania w tym katalogu skryptów CGI, nawet jeśli nie jest to katalog określony dyrektywą ScriptAlias,
MultiView - kiedy na serwerze nie ma pliku, o który prosi klient, serwer próbuje zgadnąć, który dokument najbardziej pasuje do prośby klient
AllowOverride - dyrektywa ta określa, które parametry konfiguracji głównej można zmieniać dla podkatalogów za pomocą plików .htaccess.
Dyrektywa AllowOverride składa się z następujących opcji :
Options - plik .htaccess może zmieniać opcje nie wymienione w dyrektywie Options dla danego katalogu
FileInfo - plik .htaccess może zawierać dyrektywy modyfikujące typ informacji dokumentu
AutoConfig - plik .htaccess może zawierać dyrektywy odpowiedzialne za autoryzację dostępu
Indexes - plik .htaccess może zawierać dyrektywy sterujące indeksowaniem katalogów
Limit - plik .htaccess może zawierać dyrektywy allow, deny i order,
order - określa, jakie prawa dostępu można nadać katalogowi
allow - dostęp do katalogu jest możliwy
deny - dostęp do katalogu jest zabroniony
allow from all lub deny from all - określa, kogo obowiązują dane prawa.
4) Serwery wirtualne
Serwery wirtualne są jedną z bardziej popularnych usług dostarczanych przez serwer Apache. Dzięki odpowiedniej konfiguracji kilku dyrektyw można stworzyć praktycznie nieograniczoną liczbę serwerów WWW, znajdujących się na tym samym fizycznym serwerze, posiadających własne unikalne nazwy i przechowujących swoje dane w odrębnych katalogach .
Serwer Apache dostarcza dwóch sposobów tworzenia hostów wirtualnych.
Możemy posiadać tylko jeden adres IP z wieloma rekordami CNAME umieszczonymi na serwerze DNS, które będą wskazywały właśnie na ten adres lub druga możliwość, to stworzenie tylu serwerów, ile mamy dostępnych adresów (jeden serwer przyporządkowany jednemu interfejsowi).
Serwery wirtualne identyfikowane nazwami domenowymi
Konfiguracja serwera identyfikowanego nazwami domenowymi umożliwia uruchomienie wielu hostów wirtualnych na tym samym fizycznym serwerze, któremu przyporządkowany jest tylko jeden adres IP (jeden adres IP wiele serwerów WWW).
Aby było to możliwe należy umieścić na serwerze DNS dodatkowe nazwy dla naszego serwera za pomocą rekordu CNAME. Wówczas gdy klient HTTP wyśle żądanie skierowane do serwera, wysyła wraz z nim zmienną określającą nazwę serwera, do którego żądanie jest adresowane. To właśnie w oparciu o tę zmienną serwer określa, do którego wirtualnego hosta ma przekazać żądanie.
Przed głównymi blokami konfigurującymi hosty wirtualne należy dodać dyrektywę :
NameVirtualHost IP_naszego_serwera
dzięki której określimy, który adres IP ma być skojarzony z więcej niż jedną nazwą.
Dla każdej nazwy obsługiwanej przez ten serwer należy stworzyć osobny blok dyrektyw w postaci :
<VirtualHost IP_naszego_serwera >
ServerName nazwa_hosta_1.nasza_domena
SerwerAlias alias1, alias2
DocumentRoot /ścieżka_do_katalogu_hosta_1/
TransferLog /ścieżka_do_katalogu_hosta_1/logs/acces_log
ErrorLog / ścieżka_do_katalogu_hosta_1/logs/error_log
</VirtualHost>
<VirtualHost IP_naszego_serwera >
ServerName nazwa_hosta_2.nasza_domena
SerwerAlias alias1, alias2
DocumentRoot /ścieżka_do_katalogu_hosta_2/
TransferLog /ścieżka_do_katalogu_hosta_2/logs/acces_log
ErrorLog / ścieżka_do_katalogu_hosta_2/logs/error_log
</VirtualHost>
W blokach konfiguracyjnych pojawia się dyrektywa SerwerAlias .
Dyrektywą tą możemy określić aliasy dla nazwy naszego serwera wirtualnego, dzięki czemu użytkownicy będą mogli używać skróconej nazwy hosta, np.:
zamiast
http://nazwa_hosta_1.nasza_domena/
można użyć nazwy
http://alias1/
Wewnątrz bloku <VirtualHost> </VirtualHost> możemy podawać dowolne dyrektywy konfiguracyjne, które zostały omówione w poprzednich rozdziałach oprócz dyrektyw :
ServerType, StartServers, MaxSpareServers, MinSpareServers, MaxRequestsPerChild, BindAddress, Listen, PidFile, TypesConfig, ServerRoot .
Jeśli planujemy uruchomienie na naszym serwerze większej ilości hostów wirtualnych, dobrym rozwiązaniem jest umieszczenie wszystkich komunikatów w jednym pliku dziennika błędów, zamiast w osobnych plikach. Dzięki temu rozwiązaniu unikniemy wyczerpania się systemowego limitu liczby deskryptorów plików (zwykle 64 dla jednego procesu), co mogłoby spowodować brak wpisów w dziennikach lub długi czas oczekiwania na odpowiedź serwera po pojawieniu się żądania HTTP.
Serwery wirtualne identyfikowane adresami IP
Konfiguracja tego typu serwerów jest dobrym rozwiązaniem, jeśli posiadamy dużą pulę adresów publicznych. Wówczas każdemu interfejsowi w naszym systemie możemy przypisać jeden adres IP.
Konfiguracja tego typu serwerów jest adekwatna do konfiguracji serwerów identyfikowanych nazwami domenowymi, z wyjątkiem braku dyrektywy NameVirtualHost.
Jeśli skonfigurowaliśmy poprawnie interfejsy sieciowe, to uruchomienie hostów wirtualnych ogranicza się do dodania w pliku httpd.conf kilku prostych dyrektyw w postaci :
<VirtualHost adres_IP_dla pierwszego_hosta_1 >
ServerName www.nazwa_hosta_1.nasza.domena
DocumentRoot /ścieżka_do_katalogu_hosta_1/
TransferLog /ścieżka_do_katalogu_hosta_1/logs/acces_log
ErrorLog /ścieżka_do_katalogu_hosta_1/logs/error_log
</VirtualHost>
6