Podręcznik Apache.

Transkrypt

Podręcznik Apache.
http://www.linuxstorm.org/
Michał Gottlieb.
Podręcznik Apache.
2005.04.12
strona 1
http://www.linuxstorm.org/
...::: 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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
–
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
#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 [email protected]
# 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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
</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
http://www.linuxstorm.org/
# 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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
4.1.Uruchamianie
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
- normalny start serwera.
stop
- zatrzymanie pracy serwera i zabicie wszystkich jego procesów.
restart
- 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
- sprawdza poprawność składni w pliku konfiguracyjnym.
help
- 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
http://www.linuxstorm.org/
5.0. Dodatkowe możliwości.
5.1. Moduły.
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
- główna domena
www.linuxstorm.org
- główna strona www serwera
poczta.linuxstorm.org
- webmail (poczta przez www)
franek.linuxstorm.org
- strona użytkownika 'franek'
kunegunda.linuxstorm.org
- strona użytkownika 'kunegunda'
bramka.linuxstorm.org
- przekierowanie do bramki IRC
Teraz na końcu pliku httpd.conf musisz dopisać ustawienia dla tych domen.
strona 18
http://www.linuxstorm.org/
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 [email protected]
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 [email protected]) 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 [email protected]
DocumentRoot /usr/local/apache/htdocs
ServerName linuxstorm.org
</VirtualHost>
strona 19
http://www.linuxstorm.org/
<VirtualHost poczta.linuxstorm.org>
ServerAdmin [email protected]
DocumentRoot /usr/local/apache/htdocs/poczta
ServerName poczta.linuxstorm.org
</VirtualHost>
<VirtualHost franek.linuxstorm.org>
ServerAdmin [email protected]
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 [email protected]
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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
--- 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
http://www.linuxstorm.org/
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
http://www.linuxstorm.org/
Teraz proponuję wejść do tego katalogu przez przeglądarkę i sprawdzić czy wszystko działa.
Po wpisaniu w przeglądarce adresu tego katalogu (http://moja.domena.pl/zdjecia/) powinno się
wyświetlić okno logowania. W przeglądarce Opera będzie ono wyglądało mniej więcej tak:
Trzeba tutaj wpisać nazwę użytkownika i hasło, które podaliśmy podczas tworzenia plików. Jeśli
próba zalogowania nie powiedzie się, zostanie wyświetlona strona błędu 401 (Authorization
Required) i nie będzie możliwe obejrzenie plików znajdujących się w tym katalogu.
strona 24
http://www.linuxstorm.org/
6.0. Pomoc.
W przypadku problemów lub po prostu chęci poznania innych możliwości serwera Apache,
można zajrzeć na stronę http://httpd.apache.org/ lub do dokumentacji załączonej do archiwum z
plikami Apache.
Dokumentacja Apache 1.3: http://httpd.apache.org/docs/
Dokumentacja modułów: http://httpd.apache.org/docs/mod/
Oficjalne moduły Apache: http://httpd.apache.org/docs/mod/index.html
Więcej o modułach Apache: http://modules.apache.org/
Więcej o autentykacji w Apache: http://httpd.apache.org/docs/howto/auth.html
CGI-BIN: http://httpd.apache.org/docs/howto/cgi.html
Wirtualny hosty: http://httpd.apache.org/docs/vhosts/index.html
Najczęściej zadawane pytania i odpowiedzi na nie: http://httpd.apache.org/docs/misc/FAQ.html
RFC związane z tematami HTTP: http://rfc.net/search.php3?phrase=http
strona 25
http://www.linuxstorm.org/
Jeśli ktoś znalazł w tym opisie jakieś błędy lub ma pytania z nim związane to proszę o kontakt na
adres: [email protected].
Autor: Michał Gottlieb
E-Mail: [email protected]
WWW: http://www.linuxstorm.org/ - http://raven.linuxstorm.org/
strona 26