httpd 1


AKADEMIA GÓRNICZO-HUTNICZA
Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki
KATEDRA INFORMATYKI
HTTPD
Prowadzący: mgr inż. Bogusław Juza
Autorzy: Jacek Madej
Bartosz Aawniczek
Tomasz Kurek
Spis treści
1. Protokół HTTP_______________________________________________________________________3
1.1. Wstęp _______________________________________________________________________3
1.2. Zapytania i odpowiedzi HTTP___________________________________________________5
1.3. Zapytanie HTTP ______________________________________________________________5
1.4. Pola HTTP___________________________________________________________________6
1.5. Odpowiedz HTTP _____________________________________________________________8
1.6. Cookies _____________________________________________________________________10
1.7. Autoryzacja _________________________________________________________________10
2. Apache jako demon HTTPD___________________________________________________________12
2.1. Rynek serwerów______________________________________________________________12
2.2. Dlaczego Apache _____________________________________________________________13
3. Uruchamianie_______________________________________________________________________14
4. httpd.conf __________________________________________________________________________15
4.1. Dyrektywy blokowe___________________________________________________________15
4.2. .htaccess ____________________________________________________________________17
4.3. Konfiguracja serwera _________________________________________________________18
5. Moduły ____________________________________________________________________________22
5.1. Mod_perl ___________________________________________________________________22
5.2. Mod_php____________________________________________________________________22
5.3. Mod_rewrite_________________________________________________________________22
5.4. Inne moduły _________________________________________________________________22
6. Serwery wirtualne ___________________________________________________________________25
6.1. serwery wirtualne identyfikowane adresami IP____________________________________25
6.2. serwery wirtualne identyfikowane nazwami _______________________________________26
6.3. serwery wirtualne identyfikowane numerami portów_______________________________26
7. CGI _______________________________________________________________________________28
7.1. Wstęp ______________________________________________________________________28
7.2. Formularze__________________________________________________________________28
7.3. Konfiguracja ________________________________________________________________29
8. suExec_____________________________________________________________________________33
9. Proxy______________________________________________________________________________35
9.1. Wstęp ______________________________________________________________________35
9.2. Konfiguracja ________________________________________________________________35
10. yródła ____________________________________________________________________________38
10.1. WWW______________________________________________________________________38
10.2. Literatura___________________________________________________________________38
2 z 38
1. Protokół HTTP
1.1. Wstęp
Httpd jest demonem, który wykorzystuje protokół HTTP do serwowania dokumentów klientom.
Protokół HTTP jest zestawem wiadomości (posiadających swoje ściśle określone znaczenie) wymienianych pomiędzy
dwoma komputerami. Komunikaty te są transmitowane zwykłym tekstem poprzez połączenie zrealizowane nad
protokołem TCP/IP.
Protokół HTTP jest oparty o architekturę klient-serwer.
Komputer klienta przy pomocy przeglądarki WWW łączy się z serwerem z portem na który oczekuje demon HTTPD
(zwykle 80) i nawiązuje połączenie. Następnie przy pomocy protokołu HTTP klient wysyła żądanie o chęci pobrania
określonego dokumentu.
Serwer HTTPD odpowiednio interpretuje to żądanie i wysyła odpowiednią odpowiedz do klienta.
Sytuację tą ilustruje rysunek:
3 z 38
Kolejność czynności wykonywane podczas przykładowej sesji
1. W momencie wpisania przez użytkownika w przeglądarce adresu URL strony, który użytkownik chce pobrać
przeglądarka dokonuje analizy wpisanego tekstu.
2. Z wpisanego ciągu znaków wyodrębnia następujące fragmenty:
-rodzaj protokołu(http,ftp,...)  domyślnym protokołem jest HTTP
-nazwę hosta(lub adres IP jeżeli użytkownik taki wpisze)
-numer portu(domyślnie 80)
-nazwę dokumentu (np. strona html)
3. Kolejną czynnością jest określenie adresu IP hosta(jeżeli nie został wpisany w polu adresu w przeglądarce)  z
pomocą przychodzi DNS.
4. Następnie przeglądarka łączy się z danym serwerem na określonym numerze portu(w zależności od protokołu,
numeru podanego przez użytkownika) i próbuje pobrać żądany dokument.
Pobieranie dokumentu jest czynnością polegającą na wysłaniu sekwencji określonych wiadomości tekstowych
określanych mianem żądania(REQUEST). W odpowiedzi na te żądania serwer odsyła odpowiedz(RESPONSE) oraz
żądany dokument(lub komunikat o np. jego braku).
4 z 38
1.2. Zapytania i odpowiedzi HTTP
Zapytania oraz odpowiedz składają się z nagłówka(HEADER) oraz danych.
Różnorodność pól nagłówka zależy od wersji protokołu HTTP.
Pierwszą wersją protokołu był HTTP/0.9. Był on bardzo mało rozbudowany, nie posiadał pól nagłówka. Jedynym
komunikatem wysyłanym przez klient była linia określająca dokument do pobrania.
Wersja HTTP/1.0 protokołu umożliwiała już stosowanie różnych pól nagłówka, lecz nie pozwalała na określenie nazwy
domenowej hosta(patrz serwery wirtualne) oraz nie pozwalała na pobieranie kilku dokumentów jednym połączeniem.
Wraz z rozpowszechnieniem się sieci WWW oraz zwiększaniem rozmiarów stron WWW rozszerzono protokół o
możliwość tworzenia połączeń podczas których można pobierać kilka różnych dokumentów, obrazków, itd...
Wersja protokołu HTTP/1.1 umożliwiła również tworzenie tzw. serwerów wirtualnych.
1.3. Zapytanie HTTP
W zapytaniu HTTP decydującą rolę odgrywa pierwsza linia. W niej klient HTTP określa, jakie działania ma wykonać
serwer. Najczęściej chodzi tutaj o załadowanie dokumentu HTML - działanie uruchamiane poleceniem GET. Następnie
podawana jest ścieżka dostępu i nazwa dokumentu do pobrania z danej lokalizacji. Aby mieć pewność, że przeglądarka
i serwer będą "rozmawiać" w tym samym języku, do pierwszej linii zapytania dodawane jest jeszcze oznaczenie wersji
używanego protokołu. Przykładowy nagłówek może rozpoczynać się linią
5 z 38
GET /default.htm HTTP/1.0
Protokół HTTP zawiera inne polecenia, które nie są jednak tak często używane i obsługiwane przez wszystkie serwery
WWW.
Rodzaje poleceń:
POST wysyła zawartość formularza HTML do serwera. Stanowi to podstawę interaktywnych aplikacji WWW.
GET pobiera zawartość strony z serwera. Jest to najczęściej używane polecenie w HTTP
PUT wysyła do serwera dokument, który serwer zapisuje na swoim dysku lokalnym. Ponieważ niewłaściwe użycie
tego rozkazu może zakłócić poprawną pracę serwera, najczęściej nie jest on obsługiwany przez serwery.
DELETE kasuje dokument na serwerze. Również to polecenie ze względów bezpieczeństwa ignorowane jest przez
większość serwerów lub kwitowane komunikatem o błędzie.
HEAD służy do pobrania tylko danych o określonym dokumencie. Jest ona przydatna do pobrania np. inf. czy
określony dokument nie uległ modyfikacji od czasu ostatniego pobrania.
Inne metody Poniższe metody są zdefiniowane, choć nie są zbyt często stosowane:
LINK - wymaga aby informacja zawarta w nagłówku była skojarzona z dokumentem znajdującym się na serwerze
UNLINK - wymaga aby informacja zawarta w nagłówku była oddzielona od dokumentu na serwerze
OPTIONS - wymaga przesłania informacji o opcjach komunikacyjnych dostępnych na serwerze. Symbol gwiazdka
( * ) oznacza przesłanie wszystkich informacji dostępnych na serwerze
TRACE - wymaga aby cała zasadnicza część wysyłanego zapytania została odesłana w nienaruszonej postaci
POST /cgi-bin/post-query HTTP/1.0
Accept: text/html
Accept: video/mpeg
Accept: image/gif
Accept: application/postscript
User-Agent: Lynx/2.2 libwww/2.14
From: Stars@WDVL.com
Content-type: application/x-www-form-urlencoded
Content-length: 150

ITEM=1234
&SUBITEM=10000
&user=john
1.4. Pola HTTP
W przypadku komunikacji opartej na protokole HTTP/1.0 po pierwszej linii zapytania HTTP mogą nastąpić dalsze linie
z opcjonalnymi polami HTTP. W polach tych przeglądarka przekazuje takie parametry, jak język żądanego dokumentu
lub podaje hasło dostępu do zastrzeżonej strony WWW.
Pola protokołu HTTP/1.0 zdefiniowane dla przeglądarki (a także dla serwera) opisane są w tabeli Znaczenie pól HTTP.
6 z 38
Znaczenie pól http
Pole zapytania Pole odpowiedzi Opis
(przeglądarka) (serwer)
Metoda kodowania dokumentu
ACCEPT Wersje kodowania MIME obsługiwane przez przeglądarkę,
CONTENT-TYPE Wersja kodowania MIME wysłanego dokumentu,
ACCEPT- Zestawy znaków obsługiwane przez przeglądarkę,
CHARSET
Wybór języka
ACCEPT- Język preferowany przez przeglądarkę,
LANGUAGE
CONTENT- Język dokumentu,
LANGUAGE
Rozmiar dokumentu
CONTENT- Rozmiar dokumentu wysłanego przez serwer, w bajtach,
LENGTH
Autoryzacja
USER-AGENT Identyfikator / nazwa programu przeglądarki,
SERVER Nazwa oprogramowania serwera,
FROM Adres e-mail użytkownika,
REFERER Ostatnio odwiedzony URL,
Data, buforowanie w pamięci cache, data utraty ważności
DATE DATE Czas zapytania / odpowiedzi,
EXPIRES Data utraty ważności dokumentu wysłanego przez serwer,
IF-MODIFIED- Data utraty ważności dokumentu, po przekroczeniu której serwer powinien
SINCE wysłać zawartość dokumentu. Jeśli data utraty ważności nie minęła,
przeglądarka używa starej wersji dokumentu zapisanej w pamięci cache,
LAST- Data ostatniej modyfikacji danych,
MODIFIED
PRAGMA Niestandardowy rozkaz często używany w postaci "Pragma: no cache", aby
wyłączyć działanie pamięci cache serwera proxy,
Przekierowanie
LOCATION Żądany dokument znajduje się pod podanym adresem,
Oczekiwanie
7 z 38
RETRY-AFTER Zapytanie powinno być powtórzone po podanym czasie,
Autoryzacja użytkownika
WWW- Wymóg autentykacji,
AUTHENTICATE
AUTHORIZATION Przesłanie identyfikatora i hasła,
Cookies
SET-COOKIE Zapisanie cookie na dysku twardym klienta,
COOKIE Zapisane cookie odsyłane jest do serwera razem z zapytaniem.
Content-Type: text/html
Date: Tue, 15 Nov 1994 08:12:31 GMT
Expires: Thu, 01 Dec 1994 16:00:00 GMT
From: Stars@WDVL.com
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Location: http://onet.pl
Referer: http://wp.pl
Server: CERN/3.0 libwww/2.17
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
1.5. Odpowiedz HTTP
Serwer, po przyjęciu i przeanalizowaniu zapytania, generuje odpowiedz, której struktura jest podobna do struktury
zapytania. W pierwszej linii serwer podaje, w której wersji protokołu HTTP została utworzona odpowiedz, aby klient
mógł ją poprawnie odczytać. Po tej informacji następuje trzycyfrowy kod statusu odpowiedzi (patrz tabela "Kody
odpowiedzi serwera WWW"). Dla łatwiejszego zrozumienia kod statusu opatrzony jest opisem tekstowym, np. "403
Access denied", który ujrzymy po nieudanej próbie zalogowania się za pomocą nazwy użytkownika i hasła. Jeśli
nie zostały stwierdzone żadne błędy, zobaczymy komunikat
"HTTP/1.0 200 OK.".
Kody odpowiedzi serwera WWW
Kod odpowiedzi Opis
Potwierdzenia
200 OK Dokument został przesłany poprawnie.
201 OK Serwer odebrał dane od przeglądarki i odesłał żądany dokument.
202 OK Polecenie zostało odebrane i uznane za poprawne, jednak serwer wykona je dopiero
pózniej.
204 No Document Serwer wykonał polecenie, jednak w rezultacie do przeglądarki nie są wysyłane żadne
dane.
8 z 38
Odmowa dostępu
301 Moved Permanently Żądany dokument nie jest już dostępny pod podanym adresem. Jeśli serwer zna nową
lokalizację dokumentu, może ją wskazać w polu Location.
302 Moved Temporarily Żądany dokument jest czasowo niedostępny pod podanym adresem. Nowa lokalizacja
podawana jest w polu Location.
304 Not Changed Dokument żądany przez przeglądarkę nie zmienił się od czasu ostatniego pobrania
(patrz pole Expires). Serwer nie wysyła dokumentu podobnie.
Niepoprawne zapytanie
400 Syntax Error Zapytanie wysłane przez przeglądarkę zawiera błąd i nie może być obsłużone.
401 Authentication needed Przeglądarka / użytkownik muszą zostać najpierw zidentyfikowani, aby uzyskać dostęp
do dokumentu.
403 Access denied Przeglądarka / użytkownik nie mogą uzyskać dostępu do dokumentu, nawet po
zidentyfikowaniu.
404 Not Found Żądany dokument nie został znaleziony.
Błąd
500 Internal Error Wskazuje na wewnętrzny błąd serwera.
501 Unknown Action Serwer nie może wykonać działania (GET, PUT, DELETE, POST).
502 Server Not Found Taki komunikat generuje serwer proxy pośredniczący w transmisji, jeśli serwer
wywoływany przez przeglądarkę nie zostanie znaleziony.
503 Server Overload Serwer jest przeciążony i nie może obsłużyć zapytania klienta. Użytkownik powinien
spróbować jeszcze raz pózniej.
HTTP/1.0 200 OK
Date: Wednesday, 02-Feb-95 23:04:12 GMT
Server: NCSA/1.3
MIME-version: 1.0
Last-modified: Monday, 15-Nov-93 23:33:16 GMT
Content-type: text/html
Content-length: 2345

. . . <br>9 z 38 <br> 1.6. Cookies <br>Wśród pół nagłówka znajduje się również pole Cookie. Pole to pozwala na zostawienie przez serwer określonej ilości <br>danych na dysku klienta oraz na wysłanie (podczas ponownej wizyty na danym serwerze) zostawionych u klienta <br>danych. <br>Dane te pozwalają serwerom np. na identyfikacje użytkowników podczas kolejnych wizyt na tych stronach. <br>Jest to mechanizm nieco kontrowersyjny ale bardzo często wykorzystywany. <br>Serwer wysyłając Cookie może określić czas ważności danego Cookie. <br>Zazwyczaj wysyłaną informacją jest określony numer użytkownika, który oprogramowanie po stronie serwera kojarzy z <br>daną osobą i może np. w zależności od wcześniej określonych preferencji użytkownika wyświetlić odpowiedni banner <br>reklamowy. <br>HTTP/1.0 200 OK <br>Date: Wednesday, 02-Feb-95 23:04:12 GMT <br>Server: NCSA/1.3 <br>MIME-version: 1.0 <br>Last-modified: Monday, 15-Nov-93 23:33:16 GMT <br>Set-Cookie: 1235212, 15-2 <br>Content-type: text/html <br>Content-length: 2345 <br><CR><LF> <br><HTML><HEAD><TITLE> . . . <br>1.7. Autoryzacja <br>Wprawdzie większość zasobów World Wide Web dostępna jest dla wszystkich, jednak pojawia się coraz więcej <br>serwisów, do których dostęp wymaga podania hasła. Hasło takie otrzymuje się zazwyczaj po wcześniejszej rejestracji. <br>Autoryzacja przebiega na podstawie pól protokołu HTTP, który specjalnie do tego celu wyposażono w procedury <br>pozwalające na rozpoznanie użytkownika i przyznanie mu praw dostępu do określonych zasobów WWW. <br>Jeśli na życzenie użytkownika przeglądarka żąda zastrzeżonej strony WWW, serwer wysyła odpowiedz o kodzie <br>"401", który oznacza, że użytkownik musi zostać jednoznacznie zidentyfikowany, zanim uzyska dostęp do zasobu. <br>Ponieważ protokół HTTP dopuszcza wiele różnych metod autoryzacji, w polu WWW Authenticate serwer określa, z <br>jakiego algorytmu korzysta i dla jakiej grupy zasobów wymagana jest autoryzacja. Przeglądarka po przyjęciu żądania <br>autoryzacji zmusza użytkownika do wpisania identyfikatora i hasła w odpowiednim okienku dialogowym. <br>Po wprowadzeniu hasła przeglądarka wysyła do serwera nowe zapytanie, przesyłając tym razem w polu Authenticate <br>hasło użytkownika. Aby przy następnej próbie otwarcia strony WWW nie trzeba było podawać tego samego hasła, <br>przeglądarka zapamiętuje hasła odpowiadające poszczególnym serwerom i pózniej, w razie potrzeby, automatycznie <br>przesyła je do serwera. <br>We wcześniejszym etapie rozwoju Internetu taki mechanizm zabezpieczania witryn wystarczał. <br>Obecnie nie jest już wystarczający. Istotną wadą tej metody jest przesyłanie hasła nieszyfrowanym kanałem. <br>W HTTP/1.1 wprowadzono rozszerzenie mechanizmu autentyfikacji. <br>Metoda ta nazywa się Digest Authentification . <br>Zapewnia ona znacznie większy stopień bezpieczeństwa, <br>10 z 38 <br> ponieważ niezaszyfrowane hasło w ogóle nie jest przesyłane. Aby użytkownik mógł się "przedstawić", serwer wysyła <br>do przeglądarki tzw. Challenge w postaci ciągu znakowego. Do tego ciągu przeglądarka dokleja hasło, po czym całość <br>szyfruje za pomocą algorytmu DIGEST. Dopiero tak przygotowany ciąg znaków wysyłany jest do serwera. Serwer po <br>swojej stronie łączy posiadane hasło z wysłanym wezwaniem, szyfruje je, a następnie sprawdza, czy to, co uzyskał, <br>zgodne jest z ciągiem przysłanym przez przeglądarkę. <br>11 z 38 <br> 2. Apache jako demon HTTPD <br>2.1. Rynek serwerów <br>Wśród najbardziej popularnych serwerów WWW liczy się tylko kilka : <br>-Apache <br>-Netscape <br>-IIS <br>-NCSA <br>Niezaprzeczalnie najpopularniejszym serwerem WWW jest Apache. W Polsce Apache ma 50% rynku. Jest to wartość <br>podobna, jak w innych krajach, gdzie Apache ma od 40% do 60% rynku (jedynym krajem, jaki znam gdzie Apache <br>ustępuje NCSA jest Japonia). Netscape w Polsce sumując różne odmiany (Enterprise, Commerce, FastTrack i <br>Communications) ma 5,7%, a Microsoft Internet Information Server ma 7,5%. Dane te są przedstawione na rysunku 2. <br>Jak widać na rysunku bardzo mocną pozycję ma wziąż serwer NCSA -- 10 % rynku i dość dobrą ma serwer CERN -- 2 <br>%. <br>Rynek serwerów w Polsce<br>inne<br>25%<br>Apache<br>CERN<br>48%<br>3%<br>Netscape<br>6%<br>IIS<br>8%NCSA<br>10%<br>Apache jest najpopularniejszym na rynku serwerem WWW. Jest wykorzystywany w większości witryn na świecie i <br>jego popularność wciąż rośnie. Jego historia wywodzi się z projektu NCSA. <br>12 z 38 <br> Rynek serwerów na świecie<br>inni<br>14%<br>Netscape<br>7%<br>IIS Apache<br>20% 59%<br>2.2. Dlaczego Apache <br>Apache to jeden z najlepszych produktów w swojej klasie. Jego modułowa konstrukcja pozwala na rozbudowę <br>możliwości, nie ograniczając twórców modułów do danego języka programowania. Mogą one powstawać zarówno w <br>C, jak i w popularnym Perlu lub w PHP. <br>Istotną cechą jest poziom konfiguracji. Praktycznie wszelkie ustawienia zostały zgrupowane w pojedynczym pliku, co <br>znacznie ułatwia pracę wprawnym administratorom. Wszystkie dyrektywy, z których Apache korzysta, są opisane w <br>dokumentacji, zawierającej jednocześnie wiele przykładów rozwiązywania problemów najczęściej napotykanych przez <br>młodych adeptów administrowania serwerem WWW. <br>Prawa dostępu można określać na poziomie poszczególnych plików, grup plików opisanych wyrażeniami regularnymi, <br>katalogów, serwerów wirtualnych lub w odniesieniu do adresów IP, z których przychodzą zapytania. Umożliwia to <br>płynne prowadzenie polityki bezpieczeństwa i znacznie ułatwia wydzielanie tzw. bezpiecznych stref serwera. Liczne <br>moduły umożliwiają weryfikację danych klienta poprzez zwykłe pliki tekstowe z kodowanym hasłem, bazy danych czy <br>też usługi katalogowe LDAP. <br>Do ciekawszych dodatków rozszerzających funkcjonalność Apache'a należą przede wszystkim moduły mod_perl, <br>mod_php oraz mod_rewrite. Pierwszy z nich daje programującym w Perlu pełny dostęp do wszystkich wewnętrznych <br>faz obróbki zapytania przez serwer. Drugą istotną zaletą jest możliwość wykonywania dotychczas używanych skryptów <br>CGI ze średnio 10-krotnie większą prędkością, dzięki eliminacji tzw. faz fork i unfork. Moduł mod_php oferuje <br>wprawnym webmasterom osadzanie kodu popularnego ostatnio języka PHP w stronach HTML. Dzięki temu łatwe się <br>staje tworzenie w dość krótkim czasie nawet skomplikowanych aplikacji WWW. Ostatni z wymienionych modułów <br>oferuje możliwość "przepisywania" adresów URL w locie i jest jednym z najbardziej skomplikowanych i potężnych <br>modułów dostępnych dla serwera Apache. <br>+ wsparcie dla praktycznie wszystkich dostępnych obecnie technologii zawartych w konkurencyjnych serwerach <br>WWW <br>+ modułowa budowa i łatwość dostosowania do własnych możliwości open source <br>13 z 38 <br> 3. Uruchamianie <br>Aby uruchomić serwer apache należy wywołać polecenie httpd. <br>Program wywołany bez dodatkowych opcji poszukuje pliku konfiguracyjnego w podkatalogu conf. <br>Aby zmienić tą lokalizację należy użyć opcji  f. <br>Opcje wywołania serwera: <br>-D identyfikator : definiuje określony identyfikator używany w dyrektywach <IfDefine> <br>-d katalog : określa położenie głównego katalogu serwera <br>-f plik : określa położenie pliku konfiguracyjnego <br>-C  dyrektywa : wykonuje zadaną dyrektywę przed rozpoczęciem przetwarzania pliku konfiguracji <br>-c  dyrektywa : wykonuje zadaną dyrektywę po zakończeniu przetwarzania pliku konfiguracji <br>-v : wyświetla numer wersji apache a <br>-V : wyświetla ustawienia kompilacji <br>-h : wyświetla wykaz dostępnych dyrektyw <br>-l : wyświetla listę modułów wchodzących w skład serwera <br>-S : wyświetla ustawienia pobrane z pliku konfiguracyjnego <br>Można również wykorzystać program apachectl dostarczany razem z serwerem. Służy on do uruchamiania, <br>zatrzymywania oraz zarządzania serwerem. <br>Parametry: <br>Start : uruchamia serwer <br>Stop : kończy pracę serwera <br>Restart : zatrzymuje i uruchamia serwer ponownie <br>Fullstatus : generuje raport o stanie serwera <br>Status : generuje skrócony raport o stanie serwera <br>Graceful : wymusza bezpieczny restart serwera. <br>Configtest : sprawdza poprawność konfiguracji <br>Polecenie  kill UID (UID  id. procesu apache a) zabija proces serwera. <br>Identyfikator procesu serwera można odczytać ze specjalnego pliku (określony w konfiguracji). <br>14 z 38 <br> 4. httpd.conf <br>Konfiguracji serwera apache dokonuje się przy pomocy specjalnego pliku konfiguracyjnego. Zazwyczaj jest to plik <br>httpd.conf znajdujący się w katalogu conf ale położenie tego pliku można określić uruchamiając program z parametrem <br> -f . Zawartość tego pliku stanowią odpowiednie dyrektywy mające określone znaczenie i odnoszące się do określonej <br>części konfiguracji. Wielkość liter nazw dyrektyw nie jest znacząca przeciwnie do wartości parametrów tych dyrektyw. <br>W pliku tym dopuszcza się także stosowanie komentarzy(rozpoczynających się znakiem  # ) oraz na dołączanie innych <br>plików konfiguracyjnych (przy pomocy odpowiednich dyrektyw). Z powodów historycznych do plików <br>konfiguracyjnych zalicza się także pliki access.conf oraz srm.conf znajdujące się w katalogu razem z plikiem httpd.conf <br>lecz autorzy apache a odchodzą od tego zwyczaju. <br>Kolejnym rozszerzeniem konfiguracji jest możliwość określenia ustawień osobnych dla różnych katalogów poprzez <br>zastosowanie plików .htaccess w których dokonuje się ustawień dla katalogu w którym znajduje się ten plik. <br>Ze względu na unix owe pochodzenie serwera apache stosowana jest unix owa konwencja oddzielania katalogów-<br>wszędzie (bez względu na system) w plikach konfiguracyjnych stosuje się  / do separacji katalogów(i plików). <br>4.1. Dyrektywy blokowe <br>Serwer Apache dysponuje bardzo rozwiniętymi możliwościami konfiguracyjnym. Jedną z większych zalet jest <br>możliwość ograniczenia pewnych fragmentów konfiguracji do poszczególnych katalogów, plików serwerów <br>wirtualnych. <br><VirtualHost> <br></VirtualHost> <br>Wszelkie fragmenty w pliku konfiguracyjnym zawarte pomiędzy tymi dyrektywami odnoszą się do konkretnego <br>serwera wirtualnego <br>Przykład: <br><VirtualHost 192.149.45.10> <br>ServerName www.test.pl <br>ServerAdmin admin@test.pl <br>DocumentRoot /var/www/test/htdocs <br>ErrorLog /var/www/test/logs/error_log <br>TransferLog /var/www/test/logs/access_log <br></VirtualHost> <br><Directory> <br>15 z 38 <br> ... <br></Directory> <br>Dyrektywy te ograniczają konfiguracje do określonego katalogu. Identyczną funkcję pełni dyrektywa <br><DirectoryMatch>, która określa katalogi na podstawie wyrażenia regularnego. <br>Przykład: <br><Directory /usr/local/httpd/htdocs> <br>... <br></Directory> <br><DirectoryMatch "^/www/day[1-7]"> <br>... <br></DirectoryMatch> <br><Files> <br>... <br></Files> <br>Użycie tej dyrektywy ogranicza działanie bloku dyrektyw do określonych przez parametr plików. Aby móc określić <br>pliki przy pomocy wyrażenia regularnego należy użyć dyrektywy <FilesMatch> <br>Przykład: <br><Files special.html> <br>& <br></Files> <br><FilesMatch *.shtml> <br>... <br></FilesMatch> <br><Location> <br>... <br></Location> <br>Dyrektywa <Location> pozwala na ograniczenie konfiguracji do określonych przez parametr adresów URL. <br>Analogicznie do w/w dyrektyw blokowych można zastosować <LocationMatch> w celu określenia adresów przy <br>pomocy wyrażenia regularnego. <br>Przykład: <br><Location /extra/data> <br>& <br></Location> <br><Location /special/data> <br>& <br></Location> <br>16 z 38 <br> <LocationMatch "/(extra|special)/data"> <br>... <br></LocationMatch> <br><IfDefine> <br>... <br></IfDefine> <br><IfDefine> pozwala na warunkowe dołączenie fragmentu konfiguracji do przetwarzania w przypadku zdefiniowanej <br>opcji określonej jako parametr tej dyrektywy. Opcję można dołączyć poprzez wywołanie serwera Apache z parametrem <br> D opcja <br>Przykład: <br><IfDefine DEBUG> <br>... <br></IfDefine> <br><IfModule> <br>... <br></IfModule> <br>Dyrektywa pozwala na warunkowe dołączenie fragmentu konfiguracji w zależności od tego czy moduł (określony przez <br>parametr) został dołączony do programu. <br>Przykład: <br><IfModule mod_rewrite.c.> <br>& <br></IfModule> <br>4.2. .htaccess <br>Aby umożliwić wielu użytkownikom serwera pewną możliwość konfiguracji serwera WWW, bez konieczności zmian <br>w pliku konfiguracyjnym autorzy Apache a udostępnili opcję, która pozwala na niemal dowolną (w zależności od <br>administratora systemu) zmianę konfiguracji serwera. Plik .htaccess umieszczony w określonym katalogu zmienia <br>sposób zachowania serwera dla plików znajdujących się w tym katalogu (i niżej). <br>Użycie tego pliku zastępuje użycie dyrektywy <Directory>, lecz niestety zmniejsza wydajność serwera(ponieważ przy <br>każdym odwołaniu do katalogu odczytywany jest plik konfiguracyjny). <br>Zmiany w pliku .htaccess są uaktywniane w momencie następnego odwołania do pliku z katalogu w którym znajduje <br>się ten plik (bez restartu systemu). <br>Zmiany domyślnej nazwy tego pliku dokonuje się przy użyciu dyrektywy <AccessFileName> <br>17 z 38 <br> 4.3. Konfiguracja serwera <br>Podstawowym fragmentem konfiguracji serwera apache jest ta część pliku httpd.conf, która odnosi się do działania <br>całego serwera. Jest to konfiguracja ogólna i niektóre jej fragmenty mogą zostać zmienione przez konfigurację <br>określonych katalogów. <br>Aby serwer apache mógł działać wystarczy plik konfiguracyjny uzupełnić o podstawowe dyrektywy: <br><ServerRoot> <br>Składnia: ServerRoot katalog <br>Użycie: konfiguracja główna <br>Określa położenie katalogu w którym zainstalowano serwer apache. <br>Przykład: <br>ServerRoot /var/www <br><DocumentRoot> <br>Składnia: DocumentRoot katalog <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa ta wskazuje apache owi w którym katalogu znajdują się pliki HTML, które chcemy udostępniać innym <br>użytkownikom poprzez WWW. <br>Przykład: <br>DocumentRoot /var/www/htdocs <br><ServerName> <br>Składnia: ServerName nazwa_domenowa <br>Użycie: konfiguracja główna, serwery wirtualne <br>Określa nazwę domenową serwera używaną w adresach URL. <br>Przykład: <br>ServerName www.apache.pl <br><TransferLog> <br>Składnia: TransferLog plik |  | polecenie <br>Użycie: konfiguracja główna, serwery wirtualne <br>Określa lokalizacje pliku z logiem zapytań do serwera. Ciekawym rozszerzeniem tej dyrektywy jest użycie jako <br>parametru nazwy programu, który będzie odbierał (poprzez strumień wejściowy) generowane przez serwer. Przykładem <br>takiego zastosowania jest użycie do obsługi logów programu  rotatelogs , który jest dostarczany razem z dystrybucją <br>serwera. Program ten okresowo zmienia pliki logów. <br>18 z 38 <br> Przykład: <br>TransferLog /var/www/logs/access.log <br><ErrorLog> <br>Składnia: ErrorLog plik|syslog[:funkcja] <br>Użycie: konfiguracja główna, serwery wirtualne <br>Określa lokalizacje pliku z logiem błędów, które wystąpiły w trakcie pracy serwera. <br>Przykład: <br>ErrorLog /var/www/logs/error.log <br><ServerAdmin> <br>Składnia: ServerAdmin adres_e-mail <br>Użycie: konfiguracja główna, serwery wirtualne <br>Określa adres mailowy osoby, która jest odpowiedzialna za administracje serwera WWW. W przypadku wystąpienia <br>błędu przetwarzania często zazwyczaj generowana jest strona informująca o błędzie i tak umieszczany jest e-mail do <br>administratora strony. <br>Przykład: <br>ServerAdmin admin@apache.pl <br>W podstawowej instalacji proces serwera uruchamiany jest z uprawnieniami użytkownika root. Nie jest to zbyt <br>rozsądne rozwiązanie ze względu na bezpieczeństwo serwera. Zalecanym rozwiązaniem jest uruchomienie serwera z <br>uprawnieniami odrębnego użytkownika, który ma przydzielone minimalne uprawnienia, wymagane do udostępniania <br>stron WWW. <br>Aby móc skorzystać z tego rozwiązania konieczne jest utworzenie nowej grupy oraz nowego użytkownika (najlepiej <br>bez dostępu do shell a). Następnie należy użyć dyrektywy <br><User> <br>Składnia: User identyfikator <br>Użycie: konfiguracja główna, serwery wirtualne <br>Ustala identyfikator użytkownika przypisany serwerowi Apache. <br>Przykład: <br>User userwww <br><Group> <br>Składnia: Group identyfikator <br>Użycie: konfiguracja główna, serwery wirtualne <br>Ustala identyfikator grupy przypisany serwerowi Apache. <br>Przykład: <br>Group groupwww <br>19 z 38 <br> Aby użytkownik miał dostęp do dokumentów, które ma udostępniać poprzez www należy tym plikom dodatkowo <br>przydzielić odpowiednie uprawnienia.(dla katalogów: +x,+r,-w, dla plików +r,-x,-w). <br>Dodatkowo jeżeli chcemy aby użytkownik mógł wykonywać skrypty(CGI) należy nadać mu prawa uruchamiania tych <br>plików. <br><ErrorDocument> <br>Składnia: ErrorDocument kod_błędu lokalizacja <br>Użycie: konfiguracja główna, serwery wirtualne, katalogi, .htaccess <br>Dyrektywa określa jaki dokument powinien zostać zwrócony klientowi w przypadku wystąpienia blędu o określonym <br>kodzie. <br>Przykład: <br>ErrorDocument 500 /error.html <br>ErrorDocument 404 /notfound.html <br>Przekierowanie może nastąpić do skrypty CGI, który może wykonać zdefiniowane przez autora czynności. <br><DirectoryIndex> <br>Składnia: DirectoryIndex rozszerzenie <br>Użycie: konfiguracja główna, serwery wirtualne, katalogi, .htaccess <br>Określa plik, które ma zostać zwrócony do klienta w przypadku zapytania o katalog. <br>Przykład: <br>DirectoryIndex index.html index.php <br><Pidfile> <br>Składnia: Pidfile plik <br>Użycie: konfiguracja główna <br>Dyrektywa określa położenie pliku w którym serwer zapisze identyfikator procesu (PID). Jest to korzystne w przypadku <br>konieczności zabicia procesu(kill), <br>Przykład: <br>Pidfile /var/www/logs/httpd.pid <br><HostNameLookups> <br>Składnia: HostNameLookups on|off|double <br>Użycie: konfiguracja główna, serwery wirtualne, katalogi <br>Włączenie tej dyrektywy powoduje przy każdorazowym zapytaniu wykonane zostaje odwrotne odwzorowanie <br>adresu(revDNS). Informacja ta jest następnie zapisywana do logów. <br>Dodatkowo użycie jako parametru  double powoduje wykonanie dwukrotnego odwzorowania. <br>Użycie tej dyrektywy ma znaczenie przy autoryzacji dostępu. <br>20 z 38 <br> Przykład: <br>HostNameLookups on <br>HostNameLookups double <br><Options> <br>Składnia: Options [+|-] opcja [+|-] opcja ... <br>Użycie: konfiguracja główna, serwery wirtualne, katalogi, .htaccess <br>Dyrektywa Options jest bardzo uniwersalna i służy do ustawiania wielu różnych opcji: <br>-ExecCGI: pozwala na wykonywanie skryptów CGI. <br>-FollowSymLinks: pozwala na użycie linków <br>-Includes: pozwala na wykonywanie poleceń SSI <br>-Indexes: w przypadku na odwołanie się do katalogu zezwala na indeksowanie zawartości katalogu <br>-MultiViews: m.in. umożliwia uzgadnianie zawartości dokumentów w zależności od typu, wersji językowej <br>-SymLinksIfOwnerMatch: zezwala na użycie linków, jeżeli zródło i cel linku należą od tego samego użytkownika <br>Przykład: <br>Options +Indexes  FollowSymLinks +ExecCGI <br><AddHandler> <br>Składnia: AddHandler nazwa rozszerzenie rozszerzenie ... <br>Użycie: konfiguracja główna, serwery wirtualne, katalogi, .htaccess <br>Dyrektywa uaktywnia istniejącą procedurę obsługi o danej nazwie i kojarzy ją z rozszerzeniami nazw plików. <br>Przykład: <br>AddHandler cgi-script cgi bat <br><SetHandler> <br>Składnia: SetHandler nazwa <br>Użycie: katalogi, .htaccess <br>Dyrektywa działa podobnie do <AddHandler> ale obejmuje swym działaniem wszystkie pliki objęte dyrektywami: <br><Directory>, <Location>, <Files> lub określone w pliku .htaccess <br><Action> <br>Składnia: Action typ_pliku skrypt <br>Użycie: konfiguracja główna, serwery wirtualne, katalogi, .htaccess <br>Dyrektywa pozwala na przypisanie określonemu typowi plików (typ procedury obsługi) programu(skryptu), który przed <br>udostępnieniem go klientowi dokona wcześniejszego przetworzenia. <br>Przykład: <br>AddHandler moj-typ moje <br>Action moj-typ /cgi-bin/moj_skrypt <br>21 z 38 <br> 5. Moduły <br>Jedną z niewątpliwych zalet serwera apache jest jego modularna budowa i elastyczność. <br>Twórcy apache umożliwili programistom pisanie swoich własnych modułów, które mogą być dołączane dynamicznie <br>do serwera i realizować określone funkcje. <br>Właśnie ogromna ilość różnorodnych modułów stanowi o popularności serwera. <br>Moduły można dołączać statycznie w trakcie kompilacji lub dynamicznie w trakcie startu apache a. <br>Aby móc dynamicznie dołączyć wybrany moduł należy w pliku konfiguracyjnym użyć dyrektywy LoadModule. <br>Częstym przypadkiem wykorzystania dynamicznie dołączanych modułów jest moduł mod_php, umożliwiający <br>udostępnianie stron napisanych w języku PHP. <br>Przykład: <br>LoadModule php4_module c:/php/sapi/php4apache.dll <br>LoadModule status_module modules/mod_status.so <br>5.1. Mod_perl <br>Mod_perl jest modułem pozwalającym na zastąpienie systemowego interpretera perla przez wbudowany, który jest <br>znacznie szybszy co zwiększa wydajność przetwarzania skryptów CGI napisanych w perlu. <br>Wydajność skryptów napisanych w perlu uruchamiana przy pomocy mod_perl jest 10 razy szybsza niż przy pomocy <br>systemowego interpretera perla. <br>5.2. Mod_php <br>Mod_php umożliwia serwowanie dokumentów napisanych w modnym ostatnio języku PHP. <br>Wykorzystanie PHP możliwe jest również bez tego modułu(patrz CGI). <br>5.3. Mod_rewrite <br>Moduł o ogromnych możliwościach. <br>Przy pomocy wyrażeń regularnych pozwala na zmianę adresów URL do których odwołują się klienci. <br>Moduł przydatny przy implementacji klastrów WWW. <br>5.4. Inne moduły <br>mod_access Kontrola dostępu do plików w zależności od adresu IP i/lub nazwy komputera <br>22 z 38 <br> klienta. Użycie tego modułu pozwala na dokładną kontrolę użytkowników, np. <br>administrator może zezwolić na wykonywanie skryptów CGI tylko pracownikom <br>firmy. <br>mod_actions Odpowiada za wykonywanie skryptów CGI w zależności od typu danych lub <br>sposobu pobrania. <br>mod_alias Pozwala mapować (udostępniać) część systemu plików w katalogu głównym <br>Apache'a, umożliwia też przekierowanie adresów URL. Część plików może <br>znajdować się poza katalogiem lub nawet na innym komputerze w sieci. <br>mod_asis Deklaracja plików, które mogą być wysyłane bez nagłówków HTTP (pliki *.asis). <br>mod_auth Moduł odpowiedzialny za uwierzytelnianie użytkowników na podstawie <br>zdefiniowanych plików tekstowych. <br>mod_auth_anon Pozwala anonimowym użytkownikom na dostęp do danych podlegających <br>weryfikacji dostępu. <br>mod_auth_db Uwierzytelnianie za pomocą plików DB (Berkeley). <br>mod_auth_dbm Uwierzytelnianie za pomocą plików DBM. <br>mod_autoindex Automatyczne tworzenie indeksów (wyświetlenie zawartości) dla katalogów, <br>które nie mają standardowych plików index.*htm* <br>mod_cern_meta Emulacja plików CERN HTTPD, pozwala dodawać dodatkowe nagłówki do <br>wszystkich plików. <br>mod_cgi Prawdopodobnie najpopularniejszy moduł. Pozwala wykonywać skrypty CGI po <br>stronie serwera i zwracać wyniki klientowi. <br>mod_digest Uwierzytelnianie za pomocą algorytmu MD5. <br>mod_dir Podstawowe operacje na katalogach. Zwykle używany do uzupełniania adresu, <br>np. http://serwer.pl/plik zostanie zastąpiony poprawnym wywołaniem <br>http://serwer.pl/plik/. <br>mod_env Moduł odpowiedzialny za przekazywanie zmiennych środowiskowych do <br>skryptów CGI/SSI. <br>mod_example Demonstracja możliwości interfejsu programowego, Apache API. <br>mod_expires Dodaje znacznik Expires (strona wygasa, traci ważność) do stron WWW <br>przesyłanych klientowi, ważne dla często zmienianych serwisów, które powinny <br>być zawsze aktualne. <br>mod_headers Pozwala na dowolną modyfikację nagłówków HTTP. <br>mod_imap Wsparcie dla map plików graficznych (.map), używane po stronie serwera <br>WWW. Zastępuje program CGI imagemap. <br>mod_include Pozwala włączać zawartości plików lub wyniki działania skryptu do zwykłych <br>plików HTML i zwracać ich zawartość klientowi. <br>mod_info Odpowiedzialny za informację o ustawieniach serwera Apache. <br>mod_isapi Pozwala używać rozszerzeń serwerowych ISAPI. Tylko dla Apache'a w wersji <br>dla Windows. <br>mod_log_agent Zapisywanie w logach nazw i wersji przeglądarek internetowych klientów. <br>mod_log_config Konfigurowalne logowanie zdarzeń, pliki log zapisywane są w formacie <br>23 z 38 <br> Common Logfile Format. <br>mod_log_referer Logowanie odwołań do plików umieszczonych na serwerze. <br>mod_mime Określenie typu pliku na podstawie rozszerzenia. <br>mod_mime_magic Określenie typu pliku na podstawie kilku bajtów jego zawartości. <br>mod_mmap_static Pozwala określić pewne niezmienne pliki, które zostaną umieszczone w pamięci <br>serwera Apache w celu szybszego dostępu. <br>mod_negotiation Odpowiedzialny za uzgadnianie najlepszej reprezentacji danych w przeglądarce <br>klienta. Wprowadzony ze względu na zgodność z HTTP/1.1 <br>mod_proxy Apache staje się serwerem proxy dla stron WWW, przyspiesza dostęp do często <br>używanych danych, gdy serwer WWW (komputer) jest wykorzystywany do <br>zapamiętywania danych. <br>mod_setenvif Pozwala modyfikować zmienne środowiskowe na podstawie wywołania (danych <br>klienta). <br>mod_so Eksperymentalny. Aadowanie dodatkowych modułów podczas działania serwera. <br>mod_speling Moduł odpowiedzialny za poprawianie pomniejszych błędów w adresach URL. <br>mod_status Wyświetla bieżący stan serwera Apache. <br>mod_userdir Ustawienia dotyczące katalogów domowych użytkowników. <br>mod_unique_id Generuje unikalny identyfikator dla każdego żądania. <br>mod_usertrack Śledzenie zachowania użytkowników za pomocą Cookies (tzw. ciasteczka), <br>szczególnie przydatne dla np. stałych klientów w sklepach internetowych lub do <br>określania preferencji użytkownika. <br>24 z 38 <br> 6. Serwery wirtualne <br>Serwer apache umożliwia uruchomienie wielu odrębnych witryn na jednym komputerze. <br>Jest to szczególnie przydatna i wykorzystywana możliwość zwłaszcza w firmach, które umożliwiają wielu klientom <br>utworzenie stron WWW na swoich serwerach. <br>Taką możliwość dają  serwery wirtualne tworzone w obrębie jednego serwera apache. <br>Implementacja serwerów wirtualnych możliwa jest na kilka sposobów: <br>-serwery wirtualne identyfikowane adresami IP <br>-serwery wirtualne identyfikowane nazwami <br>-serwery wirtualne identyfikowane numerami portów <br>Do konfiguracji serwerów wirtualnych wykorzystywane są następujące dyrektywy: <br>6.1. serwery wirtualne identyfikowane adresami IP <br>Obecnie coraz rzadziej stosowanym rozwiązaniem jest tworzenie serwerów wirtualnych, którym odpowiadają inne <br>adresy IP. <br>Jest to spowodowane dwoma czynnikami: <br>-zakres adresów IP powoli się wyczerpuje <br>-protokół HTTP/1.1 umożliwia tworzenie serwerów o tym samym IP ale różnej nazwie domenowej <br>Do konfiguracji takiego serwera używa się dyrektywy <VirtualHost> której parametrem jest numer IP serwera. <br>Przykładowy fragment konfiguracji dwóch serwerów wirtualnych przedstawiony jest poniżej: <br>... <br><VirtualHost 192.149.45.10> <br>ServerName www.test.pl <br>ServerAdmin admin@test.pl <br>DocumentRoot /var/www/test/htdocs <br>ErrorLog /var/www/test/logs/error_log <br>TransferLog /var/www/test/logs/access_log <br></VirtualHost> <br><VirtualHost 192.149.45.11> <br>ServerName www.proba.pl <br>ServerAdmin admin@proba.pl <br>DocumentRoot /var/www/proba/htdocs <br>ErrorLog /var/www/proba/logs/error_log <br>TransferLog /var/www/proba/logs/access_log <br>25 z 38 <br> </VirtualHost> <br>... <br>Niestety nie wszelkie przeglądarki są zgodne z protokołem HTTP/1.1 dlatego rozwiązanie oparte o adresy IP nadal jest <br>wykorzystywane. <br>6.2. serwery wirtualne identyfikowane nazwami <br>Nieco innym rozwiązaniem jest tworzenie serwerów wirtualnych identyfikowanych nazwami. Jest to możliwe dzięki <br>temu, że w protokole HTTP/1.1 przeglądarki w zapytaniu przesyłają nazwę domenową witryny. <br>Zaletą tego rozwiązania jest wykorzystanie jednego adresu IP dla wielu serwerów wirtualnych. <br>Przykład konfiguracji: <br>... <br>NameVirtualHost 192.149.45.10 <br><VirtualHost www.test.pl> <br>ServerName www.test.pl <br>ServerAdmin admin@test.pl <br>DocumentRoot /var/www/test/htdocs <br>ErrorLog /var/www/test/logs/error_log <br>TransferLog /var/www/test/logs/access_log <br></VirtualHost> <br><VirtualHost www.proba.pl> <br>ServerName www.proba.pl <br>ServerAdmin admin@proba.pl <br>DocumentRoot /var/www/proba/htdocs <br>ErrorLog /var/www/proba/logs/error_log <br>TransferLog /var/www/proba/logs/access_log <br></VirtualHost> <br>... <br>Dyrektywa NameVirtualHost informuje apache, że żądania kierowane do danego adresu IP powinny być dalej <br>rozdzielane w zależności od nazwy domenowej witryny. <br>6.3. serwery wirtualne identyfikowane numerami portów <br>Jeszcze jednym rozwiązaniem pozwalającym na utworzenie kilku witryn jest utworzenie serwerów wirtualnych <br>identyfikowanych numerami portów. <br>Jest to sposób na uruchomienie kilku odrębnych serwisów w ramach tej samej nazwy domenowej i tego samego numeru <br>IP. <br>26 z 38 <br> Przykład konfiguracji: <br>... <br>Listen 80 <br>Listen 8000 <br><VirtualHost 192.149.45.10:80> <br>ServerName www.test.pl <br>ServerAdmin admin@test.pl <br>DocumentRoot /var/www/test/htdocs <br>ErrorLog /var/www/test/logs/error_log <br>TransferLog /var/www/test/logs/access_log <br></VirtualHost> <br><VirtualHost 192.149.45.10:8000> <br>ServerName www.test.pl <br>ServerAdmin admin@test.pl <br>DocumentRoot /var/www/test2/htdocs <br>ErrorLog /var/www/test2/logs/error_log <br>TransferLog /var/www/test2/logs/access_log <br></VirtualHost> <br>... <br>27 z 38 <br> 7. CGI <br>7.1. Wstęp <br>Coraz więcej witryn używa różnego rodzaju skryptów do dynamicznego generowania stron. <br>Skrypty mogą w zależności od użycia np. <br>-zapisywać i przetwarzać dane pobrane od klientów poprzez formularze WWW <br>-pobierać dane z baz danych <br>-generować dynamiczne strony WWW <br>-rejestrować odwołania do stron i tworzyć statystyki <br>-chronić i/lub autoryzować dostęp do określonych części serwisu <br>Skryptem (programem) CGI można ogólnie nazwać każdy skrypt (program), który jest wykonywalne przez system <br>operacyjny na którym zainstalowany jest serwer WWW. <br>7.2. Formularze <br>CGI bardzo często wykorzystywane są do wprowadzania danych przez użytkownika poprzez formularze HTML. <br>Przykład formularza: <br>Zawartość formularza może zostać wysłana na dwa sposoby: <br>-metodą POST <br><form action="http://www.serwer.pl/cgi-bin/post-query" method=post> <br>Item: <input typ=text name=ITEM><br> <br>Subitem: <input typ=text name=SUBITEM><br> <br>User: <input typ=text name=user><br> <br><input type=submit value=wyślij> <br></form> <br> POST /cgi-bin/post-query HTTP/1.0 <br> Accept: text/html <br>28 z 38 <br> Accept: video/mpeg <br> Accept: image/gif <br> Accept: application/postscript <br> User-Agent: Lynx/2.2 libwww/2.14 <br> From: Stars@WDVL.com <br> Content-type: application/x-www-form-urlencoded <br> Content-length: 150 <br><CR><LF> <br> ITEM=1234 <br> &SUBITEM=10000 <br> &user=john <br>-metodą GET <br><form action="http://www.serwer.pl/cgi-bin/get-query" method=get> <br>Item: <input typ=text name=ITEM><br> <br>Subitem: <input typ=text name=SUBITEM><br> <br>User: <input typ=text name=user><br> <br><input type=submit value=wyślij> <br></form> <br> GET /cgi-bin/get-query?ITEM=1234&SUBITEM=10000&user=john HTTP/1.0 <br> Accept: text/html <br> Accept: video/mpeg <br> Accept: image/gif <br> Accept: application/postscript <br> User-Agent: Lynx/2.2 libwww/2.14 <br> . . . <br>Metoda POST zwykle używana jest do wysyłania większej ilości danych, gdyż ilość znaków które mogą zostać wysłane <br>metodą GET podlega ograniczeniu. <br>Dodatkowo dane przesyłane metodą POST nie są widoczne w pasku adresu przeglądarki. <br>Np. <br>http://www.serwer.pl/cgi-bin/get-query?ITEM=1234&SUBITEM=10000&user=john <br>7.3. Konfiguracja <br>Aby umożliwić wykonywanie skryptów CGI uprzednio należy odpowiednio skonfigurować serwer WWW, aby mógł <br>wykonywać skrypty lub programy napisane w różnych językach (np. w zależności od potrzeb użytkownika) <br>Częstym i zalecanym ze względów bezpieczeństwa nawykiem jest umieszczanie skryptów, które być uruchamiane <br>przez WWW w odrębnych katalogach(zwykle cgi-bin) dla których ustalamy odrębne uprawnienia oraz odpowiednio je <br>konfigurujemy. <br>Poniższe opcje służą do konfiguracji w/w katalogów i skryptów. <br><ScriptAlias> <br>29 z 38 <br> Składnia: ScriptAlias URL_prefiks katalog <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa pozwala na konwersje odwołań do adresów rozpoczynających się ciągiem URL_prefiks do programu CGI <br>położonego w katalogu określonym przez drugi parametr(dodatkowo muszą zostać ustawione odpowiednie prawa <br>dostępu do tego katalogu i skryptu). <br>Jednym z ciekawych zastosowań tego parametru jest imitacja katalogu przez skrypt CGI <br>Przykład: <br>ScriptAlias /cgi-bin /var/www/cgi-bin <br><ScriptAliasMatch> <br>Składnia: ScriptAliasMatch wyrażenie_regularne katalog <br>Użycie: konfiguracja główna, serwery wirtualne <br>Funkcja zbliżona do <ScriptAlias> ale prefiks może zostać zastąpiony przez wyrażenie regularne <br>Przykład: <br>ScriptAliasMatch ^/cgi-bin/(*.cgi) /var/www/cgi-bin2/$1 <br><ScriptLog> <br>Składnia: ScriptLog plik <br>Użycie: konfiguracja główna <br>Dyrektywa umożliwia rejestracje błędów związanych z przetwarzaniem CGI w okeślonym przez parametr pliku. <br>Przykład: <br>ScriptLog /var/www/logs/cgi_log.err <br><ScriptLogLength> <br>Składnia: ScriptLogLength liczba_bajtów <br>Użycie: konfiguracja główna <br>Określa maksymalny rozmiar pliku logów CGI <br>Przykład: <br>ScriptLogLength 10385760 <br><ScriptLogBuffer> <br>Składnia: ScriptLogBuffer liczba_bajtów <br>Użycie: konfiguracja główna <br>Określa maksymalny rozmiar pojedynczego bloku danych transakcji POST i PUT zapisywanego w pliku logów. <br>Przykład: <br>ScriptLogBuffer 1024 <br>30 z 38 <br> Istnieje także możliwość umieszczenia plików CGI w tym samym katalogu w którym znajdują się statyczne strony <br>HTML. Jest to rozwiązanie mniej bezpieczne. W obu przypadkach należy włączyć opcję zezwalającą na uruchamianie <br>CGI (ExecCGI). <br>W przypadku zastosowania odrębnego katalogu dla CGI fragment konfiguracji serwera wygląda następująco: <br>ServerName ww.test.pl <br>DocumentRoot /var/www/htdocs <br>Options +ExecCGI <br>ScriptAlias /cgi-bin /var/www/cgi-bin <br>Aby móc uruchamiać skrypty znajdujące się w katalogu ze stronami HTML należy dla skryptów CGI zdefiniować <br>odpowiednią procedurę obsługi(handler). <br>Przykładowa konfiguracja: <br>ServerName ww.test.pl <br>DocumentRoot /var/www/htdocs <br>Options +ExecCGI <br>AddHandler cgi-script cgi <br>Ten sposób obsługi plików jest wykorzystywany przy obsłudze skryptów napisanych w języku PHP(PHP jest bardzo <br>popularnym językiem używanym do dynamicznego generowania stron). <br>Strony napisane w języku PHP są po wywołaniu przez klienta przetworzone przez interpreter języka, a dopiero pózniej <br>udostępniane klientowi. <br>Fragment konfiguracji realizujący to działanie: <br>ScriptAlias /php4/ "C:/php/" <br>Action application/x-httpd-php4 "/php4/php.exe" <br>AddType application/x-httpd-php4 .php <br>Skrypty CGI bardzo często korzystają ze zmiennych środowiskowych do określenia różnych parametrów. <br>Bardzo przydatną funkcją apache a jest możliwość modyfikacji, definiowania lub usuwania zmiennych <br>przekazywanych do skryptów. <br>Możliwość ta może być przydatna w celach diagnostycznych w trakcie pisania skryptów. <br><SetEnv> <br>Składnia: SetEnv zmienna wartość <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa pozwala na zdefiniowanie własnej zmiennej przekazywanej do skryptu. <br>Przykład: <br>SetEnv QUERY_STRING ?item=1&subitem=123 <br>31 z 38 <br> Przykład: <br><VirtualHost host1> <br>SetEnv VHOST host_numer_jeden <br>... <br></VirtualHost> <br><VirtualHost host2> <br>SetEnv VHOST host_numer_dwa <br>... <br></VirtualHost> <br><UnsetEnv> <br>Składnia: UnsetEnv zmienna zmienna .. <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa usuwa podane zmienne środowiskowe <br><PassEnv> <br>Składnia: PassEnv zmienna zmienna .. <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa przekazuje do skryptu wybrane zmienne środowiskowe. <br>Przykład: <br>PassEnv PATH <br>32 z 38 <br> 8. suExec <br>Skrypty CGI uruchamiane są przez serwer WWW z uprawnieniami użytkownika określonego przez dyrektywę <User> <br>lub użytkownika root. Jest to pewne niebezpieczeństwo ponieważ w ten sposób odpowiednio skonstruowane skrypty <br>mogą odczytywać(lub usuwać) pliki należące do tego użytkownika. <br>Aby temu zapobiec autorzy apache a umożliwili wykorzystanie specjalnego programu(wrappera), który sprawdza <br>wykonywane skrypty pod kątem niebezpiecznych akcji oraz uruchamia je z odpowiednio zmodyfikowanymi <br>uprawnieniami. <br>Możliwy scenariusz ataku: <br>Apache jest uruchamiany z uprawnieniami użytkownika  userwww . Inny użytkownik systemu uruchamia poprzez <br>przeglądarkę skrypt CGI, który usuwa pliki należące do użytkownika  userwww . <br>Aby skonfigurować suExec należy odpowiednio zmodyfikować plik  suexec.h dostarczany razem ze zródłami <br>apache a. <br>W pliku tym konfiguruje się m.in.: <br>-identyfikator użytkownika-właściciela procesu <br>-minimalną wartość UID użytkownika uruchamiającego suExec <br>-minimalną wartość GID grupy do której należy użytkownik uruchamiający suExec <br>-katalog w którym mogą znajdować się CGI <br>-plik z logiem suExec <br>Po skonfigurowaniu należy przekompilować serwer apache. <br>Działanie suExec: <br>SuExec przy każdorazowym wywołaniu skryptu sprawdza następujące warunki: <br>-czy ścieżka dostępu do skryptu zawiera  ? ,  / lub  .. <br>-czy właściciel skryptu istnieje w systemie jako użytkownik <br>-czy istnieje w systemie grupa do której należy użytkownik uruchamiający CGI <br>-czy użytkownik uruchamiający CGI nie jest root em <br>-czy UID użytkownika nie jest zbyt niski(niż określony w konfiguracji) <br>-czy grupa do której należy użytkownik nie jest grupą superużytkownika <br>-czy GID grupy nie jest zbyt niski(niż określony w konfiguracji) <br>-czy katalog w którym znajduje się CGI nie leży poza wyznaczonym obszarem <br>-czy inni użytkownicy nie mają dostępu do zapisu do katalogu ze skryptem <br>-czy uruchamiany skrypt nie jest programem setgid lub setuid <br>-usuwa niebezpieczne zmienne środowiskowe <br>-modyfikuje zmienną PATH <br>33 z 38 <br> W przypadku nie spełnienia w/w warunków suExec nie zezwala na uruchomienie CGI i dodaje odpowiedni wpis do <br>pliku logów. <br>34 z 38 <br> 9. Proxy <br>9.1. Wstęp <br>Apache może pełnić rolę serwera proxy. Jest to rozwiązanie stosowane w przypadku podsieci zabezpieczonych <br>firewall em. <br>Podsieć ma wtedy przeważnie zamknięty dostęp do sieci internet poprzez zablokowanie połączeń na większości portów <br>Wówczas odpowiednio skonfigurowany serwer udostępnia użytkownikom z podsieci dostęp do internetu. <br>Odpowiednio skonfigurowana przeglądarka WWW zamiast łączyć się bezpośrednio z żądanym serwerem łączy się z <br>określonym portem serwera proxy i kieruje do niego żądanie. <br>Serwer proxy następnie pobiera określoną stronę bezpośrednio od żądanego serwer(lub również poprzez inne proxy) a <br>następnie zwraca strony klientowi. <br>Rozszerzeniem serwera proxy jest buforowanie często pobieranych stron WWW, ograniczenie dostępu do określonych <br> fragmentów sieci lub monitorowanie odwiedzanych przez pracowników stron. <br>9.2. Konfiguracja <br>Aby skonfigurować apache a jako serwer pośredniczący można skorzystać z następujących dyrektyw: <br><ProxyRequests> <br>Składnia: ProxyRequests on|off <br>35 z 38 <br> Użycie: konfiguracja głowna <br>Dyrektywa włącza funkcje serwera proxy. <br><ProxyRemote> <br>Składnia: ProxyRemote wzorzec serwer_zdalny <br>Użycie: konfiguracja główna <br>Dyrektywa pozwala na określenie zdalnych serwerów proxy współpracujących z danym serwerem. Wzorzec może <br>określać jaki typ protokołu lub jakie adresy mają być obsługiwane przez dany serwer zdalny. <br>Przykład: <br>ProxyRemote ftp http://ftpproxy.test.pl:8080 <br>ProxyRemote * http://w3cache.agh.edu.pl:8080 <br><ProxyPass> <br>Składnia: ProxyPass ścieżka URL <br>Użycie: konfiguracja główna <br>Dyrektywa pozwala na  przemapowanie odwołań do określonego katalogu (i jego podkatalogów) na odwołania do <br>innego serwera. <br>Przykład: <br>ProxyPass /mirror http://onet.pl <br><NoProxy> <br>Składnia: NoProxy domena|podsieć|adres-IP <br>Użycie: konfiguracja główna <br>Dyrektywa pozwala na określenie adresów(domen,podsieci) które są obsługiwane z pominięciem serwera proxy <br>Przykład: <br>NoProxy www.onet.pl <br><CacheRoot> <br>Składnia: CacheRoot katalog <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa pozwala na określenie katalogu w którym mogą być przechowywane buforowane strony. <br><CacheSize> <br>Składnia: CacheSize rozmiar <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa ustala pojemność pamięci podręcznej w kilobajtach <br><CacheGCInterval> <br>Składnia: CacheGCInterval czas <br>Użycie: konfiguracja główna, serwery wirtualne <br>36 z 38 <br> Dyrektywa określa odstęp(w godzinach) pomiędzy kolejnymi operacjami usuwania nadmiarowych <br>danych(przekraczających rozmiar pamięci podręcznej) <br><CacheMaxExpire> <br>Składnia: CacheMaxExpire czas <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa określa maksymalny czas(w godzinach) przechowywania dokumentów w buforach pamięci podręcznej. <br><CacheDefaultExpire> <br>Składnia: CacheDefaultExpire czas <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa określa czas ważności dla dokumentów pobranych za pomocą protokołu nie pozwalającego na ustalenie <br>okresu ważności. <br><CacheDirLevels,CacheDirLength> <br>Składnia: CacheDirLevels(CacheDirLength) liczba(liczba) <br>Użycie: konfiguracja główna, serwery wirtualne <br>Przy pomocy w/w dyrektyw określa się sposób dzielenia nazw buforowanych plików i tworzenia z nich struktury <br>katalogów. <br>CacheDirLevels określa głębokość struktury katalogów <br>CacheDirLength określa długość nazwy podkatalogu <br><NoCache> <br>Składnia: NoCache nazwa|domena nazwa|domena ... <br>Użycie: konfiguracja główna, serwery wirtualne <br>Dyrektywa określa nazwy domen dla których buforowanie stron nie będzie używane. <br>37 z 38 <br> 10. yródła <br>10.1. WWW <br>http://webcompare.internet.com/webbasics/index.html <br>http://www.wdvl.com/Internet/Protocols/HTTP/ <br>http://www.apache.org <br>http://serverwatch.internet.com/ <br>http://www.netcraft.com/survey/ <br>http://www.chip.pl <br>http://www.pckurier.pl <br>http://www.software.com.pl <br>10.2. Literatura <br>Ben Laurie, Peter Laurie - Apache . Przewodnik encyklopedyczny, wyd. HELION <br>38 z 38 <br><br> <br>Wyszukiwarka<br> <form method="get" action="https://zanotowane.pl/szukaj3.php"> <input value="" id="q" name="q" /> <input type="submit" value="Szukaj" /> </form> <br>Podobne podstrony:<br><a href="../../159/2527">httpd</a><br><a href="../../114/8207">httpd 8</a><br><a href="../../172/8402">system dla httpd</a><br><a href="../../107/9017">HTTPD J FORMS</a><br><a href="../../151/4664">httpd</a><br><a href="../../106/4471">HTTPD J HTTPD</a><br><a href="../../130/7319">httpd 3</a><br><a href="../../125/146">httpd 4</a><br><br><a href="https://zanotowane.pl/szukaj3.php?q=httpd+1" rel="nofollow">więcej podobnych podstron</a><br><br><form method="get" action="https://zanotowane.pl/szukaj3.php"><input value="" id="q" name="q" /><input type="submit" value="Szukaj" /></form> </div> <!-- /.container --> <footer> <div class="footer-blurb"> <div class="container"> <div class="row"> <div class="col-sm-4 footer-blurb-item"> </div> </div> <!-- /.row --> </div> </div> <div class="small-print"> <div class="container"> <p><a href="mailto:edibk@onet.pl">Kontakt</a> | <a href="../../polityka.php">Polityka prywatności</a></p> </div> </div> </footer> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-L8W7STRP18"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-L8W7STRP18'); </script> </body> </html>