Michał Gottlieb. http://www.linuxstorm.org/ Podręcznik Apache. 2005.04.12 strona 1
...::: Spis Treści :::... 1.0. O Apache... 3 1.1. Wymagania... 3 2.0. Instalacja... 4 2.1. Instalacja Apache... 4 2.2. Instalacja Apache + PHP + MySQL... 5 3.0. Konfiguracja... 7 4.0. Administracja... 16 4.1. Uruchamianie... 17 5.0. Dodatkowe możliwości... 18 5.1. Moduły... 18 5.2. Virtualne Hosty... 18 5.3. CGI-BIN... 20 5.4. htaccess... 22 6.0. Pomoc... 25 strona 2
1.0. O Apache Apache jest serwerem HTTPD opartym na darmowej licencji. Projekt Apache tworzy wielu programistów z całego świata. Apache jest kontynuacją dawnego serwera - httpd, którego autorem był Rob McCool. W lutym 1995 projekt httpd został zawieszony. Wtedy pojawił się problem, ponieważ był to zdecydowanie najpopularniejszy daemon dla stron www. Wielu użytkowników httpd zaczęło pisać własne moduły, poprawki i dodatkowe opcje serwera. Po jakimś czasie zaczęli oni się wymieniać swoimi łatkami przez internet, dzięki czemu projekt nadal był w pewien sposób utrzymywany, rozwijany i zabezpieczany. Brian Behlendorf i Cliff Skolnick założyli w końcu listę dyskusyjną dla osób, które nadal chciały rozwijać projekt. Pod koniec lutego, ośmiu programistów założyło grupę pod nazwą Apache. Byli to: Brian Behlendorf Roy T. Fielding Rob Hartill David Robinson Cliff Skolnick Randy Terbush Robert S. Thau Andrew Wilson Korzystając z httpd 1.3 jako projekt bazowy, dodali do niego wszystkie znalezione poprawki i rozszerzenia testując je na swoich własnych komputerach. Po otrzymaniu pierwszych dobrych wyników, została opublikowana pierwsza oficjalna wersja serwera Apache 0.6.2 (kwiecień 1995). W roku 1999 powstała Apache Software Foundation (http://www.apache.org/), która utrzymuje się do dzisiaj. W tej chwili rozwijane są dwie główne wersje serwera Apache. Pierwszą jest gałąź z serii 1.3, która jest oficjalnie stabilną wersją daemona, a druga to seria httpd 2.0, która rozwijana jest jako projekt 'developperski', ciągle testowany i rozwijany przez ludzi z całego świata. Ten podręcznik będzie opisywał na razie tylko wersję Apache 1.3. 1.1. Wymagania.. Do poprawnej kompilacji oraz korzystania z serwera Apache wymagane są: co najmniej 12 MB wolnej przestrzeni dyskowej kompilator języka C zgodny ze standardem ANSI (najlepiej GNU GCC w wersji 2.7.2 lub wyższej) strona 3
interpreter Perla 5 (opcjonalnie) obsługa DSO - Dynamic Shared Object (opcjonalnie) 2.0.Instalacja 2.1.Instalacja Apache. Najpierw trzeba zacząć od ściągnięcia źródeł Apache ze strony http://httpd.apache.org/download.cgi. Po ściągnięciu skopiuj archiwum w jakieś sensowne miejsce typu /usr/local/src/. Teraz rozpakuj archiwum i wejdź do powstałego katalogu: cd /usr/local/src tar -zxvf apache_1.3.33.tar.gz cd apache_1.3.33/ Pierwszą czynnością, którą powinieneś wykonać jest ustawienie parametrów, z jakimi chcesz skompilować swój serwer http. Do tego możesz użyć skryptu 'configure'. Najpierw obejrzyj wszystkie dostępne opcje wpisując:./configure help Opiszę tutaj kilka ważniejszych z tych opcji. --prefix=[katalog] - katalog docelowy, w którym ma zostać zainstalowany serwer. --add-module=[plik] - dodanie modułu do kompilacji. --activate-module=[plik] - aktywowanie modułu. --enable-module=[nazwa] - włączenie modułu. --disable-module=[nazwa] - wyłączenie modułu --with-perl=[plik] - ścieżka do perla. Większość z pozostałych opcji będzie można ustawić później. Załóżmy, że na razie nie chcesz kompilować żadnych dodatkowych modułów, a perla masz zainstalowanego w standardowych katalogach. Aby zainstalować serwer do katalogu /usr/local/apache, wydaj polecenie:./configure prefix=/usr/local/apache strona 4
Teraz skrypt configure sprawdzi wszystkie zależności i czy masz zainstalowane w systemie wszystkie wymagane biblioteki. Jeśli nie będzie żadnych błędów, to możesz zacząć kompilację. W tym samym katalogu wpisz: make Jeśli nie będzie błędów, zainstaluj wszystkie pliki: make install Po wydaniu tego polecenia, wszystkie pliki powinny zostać skopiowane do katalogu, który podałeś w ustawieniach 'prefix'. W tym przypadku /usr/local/apache. 2.2. Instalacja Apache + PHP + MySQL Trochę inaczej wygląda instalacja, jeśli chcesz używać PHP i bazy danych MySQL. Ściągnij źródła MySQL i PHP. Najpierw musisz zainstalować bazę MySQL (instrukcje znajdziesz w dokumentacji dołączonej do źródeł bazy). Teraz skopiuj archiwum z PHP do /usr/local/src/ (tam gdzie masz archiwum z Apache) i po kolei wydaj polecenia: cd /usr/local/src tar -zxvf apache_1.3.33.tar.gz tar -zxvf php-4.3.9.tar.gz Oczywiście w miejsca plików musisz wpisać takie, jakie ściągnąłeś. Dla szybszego dostępu zrób sobie jeszcze dowiązania symboliczne: ln -s apache_1.3.33 apache ln -s php-4.3.9 php Najpierw musisz zająć się Apache: cd apache./configure prefix=/usr/local/apache Teraz zainstaluj PHP: strona 5
cd../php./configure with-apache=../apache with-mysql make make install PHP masz w tym momencie zainstalowane. Możesz wrócić do Apache: cd../apache./configure --prefix=/usr/local/apache activate-module=src/modules/php4/libphp4.a make make install Tutaj możesz się zdziwić, dlaczego aktywujesz plik, którego nie ma, ale wszystko jest dobrze. Plik 'libphp4.a' zostanie utworzony w trakcie kompilacji. Aby Apache poprawnie obsługiwać pliki PHP, musisz jeszcze wykonać dwie czynności. Pierwszą będzie skopiowanie pliku z ustawieniami PHP: cd../php cp php.ini-dist /usr/local/lib/php.ini Ostatnią rzeczą będzie dopisanie do /usr/local/apache/conf/httpd.conf linii: AddType application/x-httpd-php.php Możesz sprawdzić czy PHP na pewno działa. Do katalogu z plikami stron www skopiuj php 'test.php' z taką zawartością: <?php phpinfo();?> Uruchom serwer: cd /usr/local/apache/bin./apachectl start I wejdź jakąś przeglądarką na stronę http://www.twój-serwer.pl/test.php. Jeśli zobaczysz stronę z ustawieniami Apache i PHP to będziesz wiedział, że wszystko działa prawidłowo. W innym strona 6
przypadku upewnij się, czy nie popełniłeś nigdzie błędu i czy apache jest poprawnie skonfigurowany. 3.0. Konfiguracja. Cała konfiguracja serwera Apache znajduje się w pliku 'httpd.conf' (/usr/local/apache/conf/httpd.conf). Postaram się tutaj opisać najważniejsze opcje konfiguracji. Komentarze będę umieszczał za znakiem '#' (hasz). Otwórz plik httpd.conf w swoim ulubionym edytorze i zacznij konfigurację: # Typ serwera, czyli na jakiej zasadzie ma on działać. Do wyboru mamy 'standalone' i 'inetd', ale ten pierwszy sposób bedzie o wiele bezpieczniejszy. ServerType standalone # Główny katalog Apache, czyli gdzie jest zainstalowany. ServerRoot "/usr/local/apache" # Ścieżka do pliku blokującego. Plik ten jest tworzony podczas startu serwera i usuwany przy jego wyłączaniu. LockFile /usr/local/apache/logs/httpd.lock # Ścieżka do pliku, który będzie zawierał aktualny numer procesu apache. PidFile /usr/local/apache/logs/httpd.pid # Ścieżka do pliku scoreboard, który będzie przechowywał informacje o wewnętrznych procesach serwera. ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard # Ścieżki do plików źródeł i dostępu. Zalecane jest, aby te pliki pozostały puste, a wszystkie ustawienia były wpisywane w httpd.conf. Aby całkowicie zignorować te pliki, możesz wpisać jako ścieżkę /dev/null. ResourceConfig /usr/local/apache/conf/srm.conf AccessConfig /usr/local/apache/conf/access.conf # Liczba sekund, którą serwer będzie oczekiwał na pakiet. Po upływie tego czasu, połączenie z klientem będzie zrywane. Standardowo jest to 300 sekund. strona 7
Timeout 300 # Utrzymywanie połączenia z klientem podczas przeglądania plików na serwerze. (wpisz 'Off' aby wyłączyć, lub 'On' aby włączyć) KeepAlive On # Liczba maksymalnych zapytań, które będą utrzymywane jako jedno połączenie. Im wyższa liczba, tym wydajniejsza będzie praca serwera. Aby ustawić 'nieograniczone', wpisz 0. MaxKeepAliveRequests 100 # Liczba sekund, którą serwer ma oczekiwać na kolejne zapytanie od tego samego klienta i tego samego połączenia. KeepAliveTimeout 15 # Minimalna ilość procesów serwera. Przy słabych komputerach lepiej zostawić mniejszą liczbę. MinSpareServers 5 # Maksymalna ilość procesów, której serwer ma nie przekraczać. MaxSpareServers 10 # Liczba procesów, z którymi będzie startował serwer. StartServers 5 # Maksymalna liczba użytkowników połączonych jednocześnie do serwera. Jeśli zostanie ona osiągnięta, następny klient zostanie zablokowany i będzie oczekiwał, aż zwolni się miejsce, więc ta liczba nie powinna być zbyt mała. MaxClients 150 # Liczba maksymalnych odwołań do procesu głównego od procesów potomnych zanim zakończą one pracę. Nieograniczona ilość to 0 i tak najlepiej zostawić. MaxRequestsPerChild 0 # Tutaj możesz ustawić port i adres IP, na którym będzie pracował serwer. Jeśli posiadasz tylko jeden adres IP i nie chcesz używać żadnych niestandardowych portów, to zostaw te opcje zakomentowane (zakomentowane, zahaszowane opcje nie są brane pod uwagę). #Listen 3000 #Listen 12.34.56.78:80 strona 8
#BindAddress * # Włączenie tej opcji karze serwerowi wyświetlać pełne informacje o swoim statusie. ExtendedStatus Off # Port, na którym będzie nasłuchiwał serwer. Standardowym portem jest 80. Port 80 # Użytkownik i grupa, na których ma pracować serwer. Dla bezpieczeństwa powinny one mieć jak najniższe uprawnienia. User nobody Group nogroup # Adres pocztowy administratora serwera. ServerAdmin raven@linuxstorm.org # Nazwa serwera. Będzie to adres, który serwer będzie wysyłał do klientów podczas połączenia. Możesz podać tutaj swoją domenę. Wpisany adres musi być koniecznie zarejestrowaną w DNS'ach domeną, w przeciwnym wypadku nie będzie działał poprawnie. Jeśli nie posiadasz żadnej domeny, wpisz swój adres IP. ServerName linuxstorm.org # Główny katalog serwera, w którym będą się znajdowały publikowane pliki. DocumentRoot "/usr/local/apache/htdocs" # Ustawienia dostępu do katalogu głównego. <Directory /> Options FollowSymLinks AllowOverride All </Directory> # Początek ustawień dla głównego katalogu publicznego. Wpisz tutaj ścieżkę, którą podałeś w DocumentRoot <Directory "/usr/local/apache/htdocs"> Options Indexes FollowSymLinks MultiViews AllowOverride All strona 9
Order allow,deny Allow from all # Tutaj możesz zablokować dostęp do serwera z podanego adresu. Deny from jakis.adres.pl </Directory> # Ustawienia dla modułu 'mod_userdir'. Pozwala on na publikowanie swoich plików przez użytkowników, w ich domowych katalogach. <IfModule mod_userdir.c> # Nazwa katalogu, w którym mają znajdować się pliki do udostępniania. Katalogi o takiej nazwie należy później utworzyć w swoim katalogu domowym, np. /home/raven/www. UserDir www </IfModule> # Ustawienia dla katalogów użytkowników. Jeśli ustawiłeś wcześniej inny katalog niż 'www' to tutaj wpisz jego nazwę. <Directory /home/*/www> AllowOverride FileInfo AuthConfig Limit # Jeśli Twój serwer nie obsługuje skryptów CGI-BIN lub nie chcesz, aby użytkownicy mieli prawo do ich uruchamiania to usuń ostatnią opcję. Options MultiViews Indexes SymLinksIfOwnerMatch +ExecCGI <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> # Nazwy plików, które będą przez serwer wyszukiwane w pierwszej kolejności, jako index katalogu. Możesz podać dowolną ilość plików, oddzielając każdy spacją. <IfModule mod_dir.c> DirectoryIndex index.html index.htm index.php index.cgi strona 10
</IfModule> # Nazwa pliku dostępu, który używany będzie do autoryzacji użytkownika. AccessFileName.htaccess # Prawa dostępu do plików.htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files> # Włączenie tej opcji zezwala serwerowi na korzystanie z nazw kanonicznych, które serwer będzie sam tworzył na bazie adresu domenowego i portu. UseCanonicalName On # Plik z ustawieniami do różnych rozszerzeń. <IfModule mod_mime.c> TypesConfig /usr/local/apache/conf/mime.types </IfModule> # Standardowy typ dla publikowanych plików. DefaultType text/plain # Ten moduł pozwala serwerowi 'zgadywać', jaki właśnie plik jest odczytywany i czego powinien użyć. <IfModule mod_mime_magic.c> MIMEMagicFile /usr/local/apache/conf/magic </IfModule> # Jeśli chcesz, aby serwer odczytywał adresy host klientów, włącz tą opcję. W przeciwnym wypadku będzie odczytywany tylko adres IP. HostnameLookups On # Ścieżka do pliku błędów, do którego serwer będzie wysyłał informacje. ErrorLog /usr/local/apache/logs/error_log strona 11
# Stopień dokładności, czyli jakie informacje mają być zapisywane do pliku błędów. Możliwe opcje to: debug, info, notice, warn, error, crit, alert, emerg. Jeśli chcesz otrzymywać tylko ostrzeżenia, zostaw 'warn'. LogLevel warn # Tutaj możesz zdefiniować składnię logowania dla plików 'CustomLog'. Między znakami umieść parametry, a za nimi nazwę formatu, pod którym będą one dostępne. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent # Plik dostępu. Do niego serwer będzie zapisywał informacje o każdym połączeniu. Po podaniu ścieżki możesz ustalić jaki ma być format logowania. Do wyboru masz te zdefiniowane wyżej. CustomLog /usr/local/apache/logs/access_log combined # Włączenie tej opcji pozwala na wyświetlanie statusu serwera między innymi podczas listowania FTP i na stronach błędów. Aby wyłączyć tą opcję, wpisz Off, a jeśli chcesz, aby serwer wyświetlał tylko Twój adres e-mail, wpisz EMail. ServerSignature On # Ten moduł umożliwia Ci tworzenie aliasów do dowolnych katalogów w systemie. <IfModule mod_alias.c> Alias /icons/ "/usr/local/apache/icons/" <Directory "/usr/local/apache/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Alias /manual/ "/usr/local/apache/htdocs/manual/" <Directory "/usr/local/apache/htdocs/manual"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny strona 12
Allow from all </Directory> # Ścieżka i alias do katalogu skryptów CGI-BIN. ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory "/usr/local/apache/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> </IfModule> # Konfiguracja modułu 'autoindex'. <IfModule mod_autoindex.c> IndexOptions FancyIndexing AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/* AddIcon /icons/binary.gif.bin.exe AddIcon /icons/binhex.gif.hqx AddIcon /icons/tar.gif.tar AddIcon /icons/world2.gif.wrl.wrl.gz.vrml.vrm.iv AddIcon /icons/compressed.gif.z.z.tgz.gz.zip AddIcon /icons/a.gif.ps.ai.eps AddIcon /icons/layout.gif.html.shtml.htm.pdf AddIcon /icons/text.gif.txt AddIcon /icons/c.gif.c AddIcon /icons/p.gif.pl.py AddIcon /icons/f.gif.for AddIcon /icons/dvi.gif.dvi AddIcon /icons/uuencoded.gif.uu strona 13
AddIcon /icons/script.gif.conf.sh.shar.csh.ksh.tcl AddIcon /icons/tex.gif.tex AddIcon /icons/bomb.gif core AddIcon /icons/back.gif.. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ DefaultIcon /icons/unknown.gif # Opisy plików. AddDescription "GZIP compressed document".gz AddDescription "tar archive".tar AddDescription "GZIP compressed tar archive".tgz # Nazwa pliku README i HEADER. (plik README wyświetlany jest na dole indeksu, a HEADER na górze, jako nagłowek.) ReadmeName README HeaderName HEADER # Nazwy ignorowanie przez index. IndexIgnore.??* *~ *# HEADER* README* RCS CVS *,v *,t </IfModule> # Konfiguracja modułu 'mod_mime'. <IfModule mod_mime.c> # Obsługiwane języki i kodowania. AddLanguage da.dk AddLanguage nl.nl AddLanguage en.en AddLanguage et.ee AddLanguage fr.fr AddLanguage de.de strona 14
AddLanguage el.el AddLanguage he.he AddCharset ISO-8859-8.iso8859-8 AddLanguage it.it AddLanguage ja.ja AddCharset ISO-2022-JP.jis AddLanguage kr.kr AddCharset ISO-2022-KR.iso-kr AddLanguage nn.nn AddLanguage no.no AddLanguage pl.po AddCharset ISO-8859-2.iso-pl AddLanguage pt.pt AddLanguage pt-br.pt-br AddLanguage ltz.lu AddLanguage ca.ca AddLanguage es.es AddLanguage sv.sv AddLanguage cs.cz.cs AddLanguage ru.ru AddLanguage zh-tw.zh-tw AddCharset Big5.Big5.big5 AddCharset WINDOWS-1251.cp-1251 AddCharset CP866.cp866 AddCharset ISO-8859-5.iso-ru AddCharset KOI8-R.koi8-r AddCharset UCS-2.ucs2 AddCharset UCS-4.ucs4 AddCharset UTF-8.utf8 <IfModule mod_negotiation.c> # Priorytet języków. LanguagePriority pl en da nl et fr de el it ja kr no pt pt-br ru ltz ca es sv tw </IfModule> # Rozszerzenia plików i aplikacje, z którymi są one powiązane. AddType application/x-tar.tgz strona 15
AddEncoding x-compress.z AddEncoding x-gzip.gz.tgz AddType application/x-httpd-php.php AddType application/cgi-bin.pl AddHandler cgi-script.cgi </IfModule> # Strony błędów. Możesz tutaj zdefiniować ścieżki do stron, które będą wyświetlane kiedy wystąpi błąd o danym numerze. ErrorDocument 500 /500.html ErrorDocument 404 /404.html ErrorDocument 402 /402.html # Konfiguracja dla modułu 'mod_serenvif'. Dzięki niemu możesz modyfikować odpowiedzi HTTP. <IfModule mod_setenvif.c> # Wyłącza opcje utrzymywania połączenia dla przeglądarki Netscape 2 oraz innych, które się pod nią 'podszywają' (spoof). Netscape 2 niepoprawnie obsługuje utrzymywanie połączeń, więc lepiej to wpisać. BrowserMatch "Mozilla/2" nokeepalive # Wyłączenia utrzymywania połączeń dla przeglądarki Microsoft Internet Explorer 4.0b. Przeglądarka ta posiada nieprawidłową implementacje protokołu HTTP/1.1 i źle obsługuję utrzymywanie połączeń przy przekierowaniach 301 i 302. BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 # Wymuszone połączenie poprzez protokół HTTP/1.0 z powodu braku lub złej obsługi HTTP/1.1. BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0 </IfModule> # Koniec konfiguracji. Jeśli nie popełniłeś błędu, serwer powinien działać z tymi ustawieniami bez żadnych problemów. Dodatkowe opcje konfiguracji będą opisane w dalszej części tego podręcznika. 4.0.Administracja strona 16
4.1.Uruchamianie http://www.linuxstorm.org/ Do uruchamiania serwera Apache służy skrypt 'apachectl', który instalowany jest razem z serwerem. Jeśli Apache zainstalowany jest w katalogu /ust/local/apache, to skrypt 'apachectl' powinien się znajdować w /usr/local/apache/bin/apachectl. Skrypt można uruchamiać z takimi parametrami: start stop restart - normalny start serwera. - zatrzymanie pracy serwera i zabicie wszystkich jego procesów. - restart serwera (czyli to samo co `stop` i `start`). fullstatus - tworzy zrzut pełnych informacji o uruchomionym daemonie (wymaga przeglądarki lynx i włączonego modułu 'mod_status'). status - tworzy zrzut krótkich informacji i uruchomionym daemonie (wymaga przeglądarki lynx i włączonego modułu 'mod_status'). graceful - służy do restartowania serwera poprzez wysłanie sygnału SIGUSR1 do daemona (dzięki temu serwer nie zrywa aktualnie nawiązanych połączeń co bardzo często przydaje się np. podczas zmiany Virtualnych Hostów). configtest help - sprawdza poprawność składni w pliku konfiguracyjnym. - wyświetla krótką informację o tych parametrach. Skrypt ten można bez problemu skopiować również do katalogu ze skryptami startowymi systemu (np. w Debianie - /etc/init.d) lub dopisać do nich polecenie uruchamiające daemona (np. echo '/usr/local/apache/bin/apachectl start' >> /etc/rc.d/rc.local). Uwagi: Czasami po nieprawidłowym zamknięciu systemu (reset) apache może nie usunąć pliku z ID swojego procesu. Plik ten jest tworzony zawsze podczas startu Apache i służy on między innymi do 'powiadamiania' daemona o tym, czy jest on uruchomiony i jeśli tak to gdzie się znajduje jego proces (tzw. rodzic). Po zatrzymaniu daemona ( apachectl stop, kill -9 `pidof httpd`, itd.) ten plik jest usuwany. Jeśli natomiast Apache nie będzie uruchomiony, a nie będzie chciał wystartować ponieważ stwierdzi, że jest już włączony, trzeba usunąć plik z PID ręcznie: rm / usr/local/apache/logs/httpd.pid i wystartować go ponownie... Jeśli Apache nie będzie mógł znaleźć pliku konfiguracyjnego, możemy podać mu ścieżkę do niego jako parametr: /usr/local/apache/bin/httpd -f /ścieżka/do/httpd.conf parametru 'gracefull' nie używa się, kiedy została zmieniona tylko ścieżka logów w httpd.conf. Jeśli chcemy nagle zmienić lokalizację zapisywania logów Apache, musimy zrestartować całego daemona (apachectl restart). strona 17
5.0. Dodatkowe możliwości. 5.1. Moduły. http://www.linuxstorm.org/ Razem ze źródłami głównego serwera Apache, dołączane są również źródła stabilnych i oficjalnych modułów. Część z nich standardowo jest zaznaczana jako 'włączone' i linkowana z serwerem podczas kompilacji. Jeśli z jakiegoś modułu chciałbyś zrezygnować lub włączyć inny, niestandardowy, musisz to zaznaczyć przed kompilacją. Robi się to podczas uruchamiania skryptu 'configure', np.:./configure enable-module=[nazwa modułu] enable-module=[nazwa drugiego modułu] disable-module=[nazwa modułu do wyłączenia] Po każdej takiej konfiguracji, potrzebna jest rekompilacja, do której można użyć polecenia `make`. Jeśli moduł wymaga konfiguracji, zazwyczaj wtedy należy to zrobić w pliku httpd.conf, ale nie ma jakiejś uniwersalnej reguły na to, więc po prostu trzeba czytać dokumentacje używanych modułów. Można je znaleźć na stronie: http://httpd.apache.org/docs/mod/ 5.2 Virtualne Hosty. Virtual Host to opcja, którą udostępniają standardowe moduły Apache. Pozwala na tworzenie wirtualnych serwerów HTTP dla różnych katalogów, użytkowników, tworzyć przekierowania, osobne strony błędów, itd... Jeśli np. masz kilka domen i chciałbyś, aby każda wskazywała na inne miejsca, możesz właśnie zrobić to w Virtual Host. Załóżmy, że masz domenę 'linuxstorm.org' ;-). Chciałbyś teraz dwóm użytkownikom stworzyć coś w rodzaju ich własnych serwerów wirtualnych z ich własnymi domenami, jeden osobny dla swojego webmaila i na przykład jedno przekierowania do bramki IRC. Najpierw musisz się upewnić, że wszystkie domeny wskazują poprawnie na Twój komputer. Niech to będą przykładowo: linuxstorm.org www.linuxstorm.org poczta.linuxstorm.org franek.linuxstorm.org kunegunda.linuxstorm.org bramka.linuxstorm.org - główna domena - główna strona www serwera - webmail (poczta przez www) - strona użytkownika 'franek' - strona użytkownika 'kunegunda' - przekierowanie do bramki IRC Teraz na końcu pliku httpd.conf musisz dopisać ustawienia dla tych domen. strona 18
Pierwszym wpisem powinna być główna nazwa serwera: NameVirtualHost linuxstorm.org I teraz ustawienia dla wszystkich wirtualnych serwerów... Najpierw główny: <VirtualHost linuxstorm.org> ServerAdmin raven@linuxstorm.org DocumentRoot /usr/local/apache/htdocs ServerName linuxstorm.org ErrorLog /usr/local/apache/logs/error_log CustomLog /usr/local/apache/logs/access_log combined </VirtualHost> Pierwsza linia (<VirtualHost linuxstorm.org>) oznacza adres, jaki w tym miejscu chcemy ustawić, więc w tym przypadku 'linuxstorm.org'. Można też podobnie wprowadzić ustawienia globalne, podając znak '*' zamiast adresu, co oznacza wszystkie kombinacje. Druga linia (DocumentRoot /usr/local/apache/htdocs) podaje ścieżkę do katalogu, w którym znajdują się pliki poblikowane przez ten wirtualny serwer. W tym przypadku jest to katalog główny (root) serwera, który został wcześniej zdefiniowany w httpd.conf. Trzecia linia (ServerAdmin raven@linuxstorm.org) zawiera informacje o administratorze danego serwera. Będzie to wyświetlane między innymi na stronach indeksu Apache, itp. Można tutaj wpisać cokolwiek, lub w ogóle nie podawać tej linii. Czwarta linia (ServerName linuxstorm.org) oznacza nazwę wirtualnego serwera. Podobnie jak z administratorem, będzie wyświetlana między innymi na stronach indeksu... Piąta i szósta linia przechowuje ścieżki do plików, do których będą zapisywane logi z tego wirtualnego serwera. Można w ten sposób łatwo monitorować ruch na każdym wirtualnym serwerze. Jeśli ścieżki dla logów nie zostaną zdefiniowane to wszystkie będą zapisywane do standardowych logów serwera zdefiniowanych wyżej w httpd.conf. Ostatnia linia zamyka blok ustawień dla tego wirtualnego serwera. Następne serwery... <VirtualHost www.linuxstorm.org> ServerAdmin raven@linuxstorm.org DocumentRoot /usr/local/apache/htdocs ServerName linuxstorm.org </VirtualHost> strona 19
<VirtualHost poczta.linuxstorm.org> ServerAdmin admin@linuxstorm.org DocumentRoot /usr/local/apache/htdocs/poczta ServerName poczta.linuxstorm.org </VirtualHost> <VirtualHost franek.linuxstorm.org> ServerAdmin franek@linuxstorm.org DocumentRoot /home/franek/www ServerName franek.linuxstorm.org ErrorLog /usr/local/apache/logs/franek-error_log CustomLog /usr/local/apache/logs/franek-access_log combined </VirtualHost> <VirtualHost kunegunda.linuxstorm.org> ServerAdmin kunegunda@gmail.com DocumentRoot /home/kunegunda/www ServerName linuxstorm.org </VirtualHost> I tutaj praktycznie kończą się ustawienia tych wirtualnych serwerów. Został jeszcze tylko 'bramka.linuxstorm.org', ale ten adres ma przekierowywać na inny, więc będzie wyglądał trochę inaczej. Przekierowanie na inne strony www robi się przez 'Redirect', np.: <VirtualHost bramka.linuxstorm.org> Redirect / http://www.linuxstorm.org/irc/ </VirtualHost> Dzięki takiemu przekierowanie, każdy po wpisaniu w przeglądarce adresu http://bramka.linuxstorm.org/ będzie automatycznie przekierowywany przez nasz serwer httpd na stronę pod adresem http://www.linuxstorm.org/irc/. 5.3.CGI-BIN strona 20
Innym przydatnym i często używanym rozszerzeniem Apache jest CGI-BIN. Dzięki CGI możemy pisać strony www w dowolnych językach programowania. W efekcie takie skrypty będą wykonywane przez system po stronie serwera, a wynik ich działania będzie wysyłany do klienta jako kod HTML (podobnie do np. PHP). Jedyną wadą CGI jest dosyć duże obciążenie systemu. Bardzo złożone skrypty uruchamiane wiele razy w krótkim czasie mogą dosyć mocno obciążać procesor serwera. Ścieżkę do katalogu z plikami CGI definiuje się w pliku httpd.conf. Standardowo jest to / usr/local/apache/cgi-bin. Jeśli w httpd.conf jest też wpisany alias dla CGI to możemy się do nich odwoływać przez np. wejście na adres http://moja.domena.pl/cgi-bin/. Dodatkowo w łatwy sposób można pozwolić na korzystanie z CGI każdemu użytkownikowi serwera. Wystarczy do ustawień katalogów użytkowników dodać opcję +ExecCGI, np.: <Directory /home/*/www>... AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch +ExecCGI </Directory> Dzięki temu każdy użytkownik będzie mógł używać skryptów CGI w swoim katalogu www. Skrypty CGI zawsze muszą być zapisane jako plik.cgi lub plik.pl (w przypadku perla) i mieć nadane prawa wykonywania przez serwer www. Aby skrypty działały poprawienia i wyświetlały informacje w przeglądarce, muszą powiadomić o typie przekazywanych danych. Dlatego każdy skrypt CGI przed wykonaniem jakichkolwiek instrukcji musi wyświetlić linię: "Content-type: text/plain\n\n Pozostałe instrukcje są już dowolne, a do wyświetlania może służyć zwykły kod HTML. Przykłady różnych języków programowania: --- skrypt w języku Perl (perl.pl) --- #!/usr/bin/perl print "Content-type: text/plain\n\n"; print CGI w Perlu\n ; --- skrypt w BASHu (bash.cgi) --- #!/bin/bash echo Content-type: text/plain echo CGI w BASHu strona 21
--- skrypt w C (c.cgi) --- /* w tym przyadku najpierw należy skompilować program. */ /* np.: gcc plik.c -o c.cgi */ #include <stdio.h> int main() { printf( Content-type: text/plain\n\n ); printf( CGI w C\n ); return 0; } 5.4. htaccess Apache posiada również ciekawą opcję zabezpieczenia publikowanych plików w wybranych katalogach. Polega to ma autoryzacji za pomocą systemu htaccess. Wystarczy w katalogu chronionym utworzyć kilka plików i ustawić użytkowników z hasłami, którzy będą mieli prawo do przeglądania zawartości tego katalogu. Pierwszą rzeczą jaką trzeba wykonać jest utworzenie pliku z hasłami. Służy do tego program `htpasswd`. Składnia dla tego programu wygląda tak: htpasswd -c /ścieżka/do/chronionego/katalogu/.htpasswd nazwa_użytkownika Na przykład, jeśli chcemy zabezpieczyć katalog 'zdjecia' w głównym katalogu Apache i dać dostęp użytkownikowi 'zygfryd', możemy wpisać w ten sposób: /usr/local/apache/bin/htpasswd -c /usr/local/apache/htdocs/zdjecia/.htpasswd zygfryd Po wpisaniu tego polecenia zobaczmy: Adding password for zygfryd New password: Re-type new password: Wpisujemy dwa razy to samo hasło i plik z zaszyfrowanym hasłem powinien już być utworzony. strona 22
Parametr '-c' oznacza utworzenie nowego pliku z hasłami. Jeśli taki plik już istnieje, a my chcemy tylko dodać następnego użytkownika to parametr '-c' pomijamy. Teraz żeby to wszystko działało trzeba jeszcze w tym samym katalogu utworzyć plik.htaccess, który może zawierać np. coś takiego: AuthUserFile /usr/local/apache/htdocs/zdjecia/.htpasswd AuthName Private AuthType Basic require valid-user Pierwsza linia oznacza ścieżkę do pliku z hasłami, który był tworzony wcześniej programem htpasswd. Drugą linia definiuje nazwę zabezpieczanego katalogu (będzie wyświetlana w oknie logowania). Następna linia oznacza sposób autentykacji użytkowników i w tym przykładzie będzie to podstawowy. Ostatnia linia jest odpowiedzialna za informację o tym, kto ma mieć dostęp do kataogu. Opcja 'valid-user' wymusza podanie użytkownika, który istnieje z pliku.htpasswd. Można tutaj zamiast 'vaild-user' podać również nazwy użytkowników oddzielone spacją. Jest też jeszcze jedna opcja, pozwalająca tworzyć grupy użytkowinków. W pliku.htaccess dodaje się ją jako: AuthGroupFile /ścieżka/do/pliku/z/grupami Plik z grupami ma bardzo prostą składnię. Wygląda tak: nazwa_grupy: użytkownik1 użytkownik2 użytkownik3 Na przykład: znajomi: franek zygfryd kunegunda Liczba użytkowników może być dowolna. Dzięki grupom możemy w łatwy sposób zarządzać użytkownikami, którzy mają mieć możliwość przeglądania zabezpieczonych plików. Ważne jest też odpowiednie 'ukrycie' plików z hasłami. Dobrym pomysłem będzie dodawanie im kropki na początku nazwy pliku (plik będzie wtedy ukryty i nie będzie wyświetlany w indeksie) i nadanie im praw odczytu tylko dla serwera Apache i roota, np.: chown root:nogroup /usr/local/apache/htdocs/zdjecia/.htpasswd chmod 640 /usr/local/apache/htdocs/zdjecia/.htpasswd strona 23