Serwer Apache – podstawy instalacji i administracji.
Transkrypt
Serwer Apache – podstawy instalacji i administracji.
Serwer Apache – podstawy
instalacji i administracji.
Jednymi z najczęściej spotykanych serwerów w sieci Internet są serwery www.
Współcześnie trudno wyobrazić sobie przedsiębiorstwo – nawet małe, które nie posiadałoby
własnej strony www w sieci Internet. W moim przekonaniu – serwery te są w praktycznie jednymi
z najistotniejszych dla przedsiębiorstw serwerów, gdyż ich funkcjonowanie przekłada się
bezpośrednio na wizerunek danej firmy, a co za tym idzie - na liczbę pozyskanych klientów oraz
poziom dochodów.
Istnieje wiele rodzajów serwerów usług webowych – np. Microsoft-owy IIS, nginx, Lighttpd,
lecz najpopularniejszym z nich jest bez wątpienia Apache. Może on współpracować prawie ze
wszystkimi systemami operacyjnymi, lecz najczęściej spotykaną platformą, na której pracuje – są
systemy Linux bądź Unix.
Celem niniejszego artykułu jest przybliżenie Czytelnikowi podstawowych zagadnień
związanych z instalacją i konfiguracją serwera Apache w systemie operacyjnym Linux oraz podanie
kilku najprostszych przykładów, ilustrujących podstawowe i najczęściej wykonywane czynności
konfiguracyjne. Opisywany w artykule serwer będzie mógł być wykorzystany jako serwer firmowej
strony internetowej, bądź jako serwer www w sieci Intranet przedsiębiorstwa oraz do testowania
różnego rodzaju aplikacji webowych. Jako system operacyjny wykorzystana zostanie dystrybucja
systemu Linix: ubuntu-10.04.3-server-amd64.
Projektowanie serwera www w zasadzie powinniśmy rozpocząć od określenia, do czego
będzie on służył i jakie będzie jego obciążenie. Jeśli mamy zamiar umieścić na serwerze firmową
stronę www, bądź aplikację, która z jakichś względów będzie w czasie późniejszym miała istotne dla
przedsiębiorstwa znaczenie (np. CRM, bądź aplikacja firmowego Intranet-u) – powinniśmy zastanowić
się nad konfiguracją macierzy RAID – sprzętowej bądź softwareowej.
Sama instalacja serwera WWW w systemie operacyjnym nie powinna nastręczać trudności
nawet Czytelnikom nie zorientowanym w systemach Linux. Sprowadza się ona w zasadzie do wydania
następującego polecenia:
apt-get install apache2
System zainstaluje Apache wraz z niezbędnymi mu dodatkowymi pakietami (zależności). Po instalacji
sprawdzamy, czy jest on już uruchomiony w naszym systemie poprzez poniższe polecenie:
/etc/init.d/apache2 status
Odpowiedź systemu operacyjnego będzie mniej więcej taka:
Apache is running (pid 1364)
Natomiast jeśli Apache nie jest uruchomiony, system zwróci następującą odpowiedź:
Apache is NOT running
Wówczas należy uruchomić usługę serwera następującym poleceniem:
/etc/init.d/apache2 start
Na polecenie to system operacyjny powinien odpowiedzieć:
* Starting web server apache2
Zawartość stron www jest przechowywana w katalogu: /var/www. Natomiast pliki i katalogi
konfiguracyjne serwera Apache znajdują się w następującej lokalizacji (uwaga: w innych
dystrybucjach systemu Linux mogą one występować w innym miejscu):/etc/apache2
Najważniejsze pliki i katalogi konfiguracyjne to:
apache2.conf: globalne ustawienia parametrów, z jakimi uruchamiany jest serwer;
mods-available: katalog, w którym przechowywane są pliki konfiguracyjne modułów
dodatkowych serwera;
mods-enabled: w tym katalogu należy dokonać dowiązania do odpowiednich plików z
katalogu mods-available, aby móc uaktywnić potrzebny nam moduł (defaultowo nie są
uruchamiane wraz z serwerem);
sites-available: katalog ten zawierał będzie pliki z konfiguracją stron www, które serwer
będzie przechowywał. Sposób użycia zostanie omówiony w dalszej części artykułu;
sites-enabled: w katalogu tym należy stworzyć dowiązanie do odpowiedniego pliku w sitesavailable aby móc udostępnić daną stronę www użytkownikom.
Dobrą praktyką jest wykonanie po instalacji serwera Apache również instalacji biblioteki, za pomocą
której Apache będzie mógł interpretować jeden z najpopularniejszych języków skryptowych w sieci
www – język PHP. Dokonujemy tego w następujący sposób:
apt-get install libapache2-mod-php5
W celu sprawdzenia czy moduł interpretera języka PHP działa oraz sprawdzenia jego parametrów
konfiguracyjnych, należy wykonać następujące czynności:
w katalogu:/var/www - tworzymy nowy plik o nazwie test.php
w pliku tym umieszczamy następujący kawałek kodu php:
<?
phpinfo()
?>
nadajemy plikowi odpowiednie prawa poleceniem: chmod 755 test.php
z poziomu przeglądarki www kierujemy wywołanie do nowo utworzonego pliku –
http://adresserwera/test.php
Jeśli zostanie wyświetlone logo języka PHP oraz parametry konfiguracyjne środowiska to oznacza, że
moduł języka PHP współpracuje z Apache poprawnie. Ponieważ zdecydowana większość aplikacji
napisanych w języku PHP korzysta z bazy danych MySQL – należy zainstalować również i ją:
apt-get install mysql-server
Mamy zatem podstawową konfigurację serwera www oraz środowiska koniecznego do
funkcjonowania aplikacji typu CMS, czy CRM, napisanych w języku PHP. W ramach ćwiczeń można
pokusić się o instalację własnej strony internetowej. W tym przypadku polecam instalację na naszym
serwerze najpopularniejszego systemu zarządzania treścią: Joomla CMS (demo dostępne pod
adresem: http://www.joomla.pl/). W tym celu należy pobrać odpowiednią paczkę z polskiej strony
Joomli, następnie rozpakować do katalogu /var/www naszego serwera, nadając rozpakowanym
plikom i katalogom odpowiednie prawa (zainteresowani mogą je znaleźć w opisach systemu Joomla).
Dalszą część instalacji wykona za nas graficzny instalator, który dostępny będzie z poziomu
przeglądarki www. Rozwiązanie to jest jednym z szybszych sposobów na uruchomienie firmowej
strony www, bądź też portalu internetowego.
Rysunek 1 – Instalacja CMS Joomla!
APACHE I HOSTY WIRTUALNE
Niekiedy jednak dane przedsiębiorstwo posiada kilka stron internetowych, związanych ze
swoją działalnością. Mogłoby się to wydawać kłopotliwe ze względu na konieczność utrzymywania
kilku serwerów www w obrębie jednego przedsiębiorstwa. Przy zastosowaniu serwera Apache w
rozwiązaniu tego problemu pomaga nam wbudowana w Apache możliwość obsługi tzw. hostów
wirtualnych – czyli kilku lub kilkunastu (w zależności od możliwości sprzętowych serwera) serwerów
webowych w obrębie tego samego serwera Apache. Poniżej opisana jest procedura uzyskania tej
funkcjonalności.
Załóżmy, że w naszym przedsiębiorstwie są dwa osobne serwisy www, które mamy zamiar
umieścić na tym samym serwerze www. Ich adresami niech będą: www.naszastrona1.pl oraz
www.naszastrona2.pl. Konfigurację możemy przeprowadzić w sposób następujący:
W katalogu /var/www tworzymy dwa nowe katalogi, które będą miały takie same nazwy, jak
adresy naszych stron:
1. mkdir /var/www/naszastrona1.pl
2. mkdir /var/www/naszastrona2.pl
Umieszczamy w nich pliki html (bądź php) naszych serwisów www, nadajemy odpowiednie
prawa.
Następnie powinniśmy poinformować serwer Apache, iż obecnie będzie obsługiwał więcej niż
jeden serwis www. W tym celu w katalogu sites-available tworzymy plik o nazwie
naszastrona1.pl, w którym umieszczamy przykładowo zestaw dyrektyw:
<VirtualHost *:80>
ServerName naszastrona1.pl
ServerAlias www.naszastrona1.pl
DocumentRoot /var/www/naszastrona1.pl
<Directory "/var/www/naszastrona1.pl">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Analogicznie postępujemy również dla serwisu www.naszastrona2.pl:
<VirtualHost *:80>
ServerName naszastrona2.pl
ServerAlias www.naszastrona2.pl
DocumentRoot /var/www/naszastrona2.pl
<Directory "/var/www/naszastrona2.pl">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Restartujemy serwer poleceniem:
/etc/init.d/apache2 restart
Po ponownym uruchomieniu hosty wirtualne o nazwach naszastrona1.pl i naszastrona2.pl powinny
być widoczne po wywołaniu poprzez przeglądarkę www.
APACHE I AUTORYZACJA
Niekiedy zachodzi konieczność, aby dane zasoby www naszego serwera udostępnić określonym przez
nas użytkownikom. Funkcjonalność tą realizuje moduł serwera Apache o nazwie mod_auth. Aby
uruchomić tę funkcjonalność, postępujemy w sposób analogiczny do opisanego przy okazji
omówienia sposobu konfiguracji hostów wirtualnych, tyle że wpisy w pliku definiującym naszą stronę
będą nieco inne. Poniżej przykładowy wpis, który ustanawia autoryzację (poprzez podanie login-u i
hasła)
<VirtualHost *:80>
ServerName naszastrona3.pl
ServerAlias www.naszastrona3.pl
DocumentRoot /var/www/naszastrona3.pl
<Location />
AuthName "Strefa dla zaufanych"
AuthType Basic
AuthBasicProvider file
AuthUserFile /var/www/naszastrona3.pl/.htpasswd
Require valid-user
</Location>
</VirtualHost>
Przechodzimy do katalogu /var/www/naszastrona3.pl i tworzymy plik o nazwie .htpasswd, który
będzie zawierał loginy i hasła użytkowników upoważnionych do obejrzenia zawartości witryny www.
Tworzymy go pleceniem:
touch .htpasswd
Następnie dodajemy uprawnionego użytkownika poleceniem:
htpasswd -c .htpasswd loginuzytkownika
Efekt działania powyższych wpisów widoczny jest na załączonym zrzucie ekranu:
Rysunek 2 – Mechanizm autoryzacji uzyskiwany za pomocą mod_auth
APACHE JAKO SERWER PROXY
Serwer Apache może pełnić rolę transparentnego serwera proxy dla http. Jest to szczególnie
przydatne wtedy, gdy posiadamy np. pracujący na tej samej maszynie serwer Tomcat, bądź też
chcemy udostępnić w sieci Internet zawartość witryny www, która jest wewnątrz naszej firmowej
sieci, lecz bez ustawiania na routerze/firewall-u przekierowania portu 80 na serwer znajdujący się
wewnątrz naszej sieci. Możemy uzyskać to postępując zgodnie z poniższymi wskazówkami.
Udostępnienie serwera Tomcat, znajdującego się na tym samym serwerze (port 8080) dla
normalnych wywołań www (port 80):
<VirtualHost *:80>
ServerName naszastrona4.pl
ServerAlias www.naszastrona4.pl
DocumentRoot /var/www/naszastrona4.pl
ProxyRequests off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Bądź też www innego serwera, który znajduje się w naszej sieci lokalnej (zakładamy, że ma adres
192.168.1.10):
<VirtualHost *:80>
ServerName naszastrona4.pl
ServerAlias www.naszastrona4.pl
DocumentRoot /var/www/naszastrona4.pl
ProxyRequests off
ProxyPass / http://192.168.1.10/nazwaserwisu
ProxyPassReverse / http://192.168.1.10/nazwaserwisu
APACHE I MOD_REWRITE
Funkcja mod_rewrite jest bardzo pożytecznym modułem serwera Apache, który pozwala na
generowanie skróconych adresów URL. Zwykle aplikacje napisane w języku PHP, np. systemy CMS,
generują adresy poszczególnych podstron naszego serwisu www w następującej, niezbyt praktycznej
postaci:
http://www.naszastrona.pl/index.php?id=827&option=produkty
Nie jest to również „lubiana” forma adresu przez wyszukiwarki internetowe. Skomplikowany adres
URL sprawia, że witryna nigdy nie osiągnie wysokiej pozycji w wynikach, mimo swojej zawartości.
Z pomocą przyjdzie nam właśnie moduł mod_rewrite serwera Apache, który po odpowiednim
skonfigurowaniu pozwoli nam uprościć adresy URL poszczególnych części naszego serwisu do na
przykład takich:
http://www.naszastrona.pl/produkty.html
Aby skorzystać z dobrodziejstw mod_rewrite, należy najpierw upewnić się, czy jest on uruchamiany
wraz z Apache. W tym celu ponownie wywołamy skrypt, który napisaliśmy w celu przetestowania
poprawności działania modułu interpretera PHP:
http://adresserwera/test.php
Moduł ten powinien być wyszczególniony w sekcji „Loaded Modules”. Jeśli nie ma go na liście, należy
go włączyć z poziomu plików konfiguracyjnych serwera Apache.
Aby moduł działał, należy w katalogu naszej strony utworzyć plik o nazwie .htaccess, w którym
dopisujemy na początek dwie następujące reguły:
Options FollowSymLinks
RewriteEngine On
Następnie, aby uzyskać translację adresu zawierającego wzorzec index.php na adres prosty,
zawierający w adresie index.html, należy posłużyć się regułą:
RewriteRule ^index.html$ index.php [L]
Składnia pliku .htaccess jest dosyć bogata - zainteresowanych Czytelników zapraszam do dostępnej
w sieci internetowej literatury, szczegółowo poruszającej zagadnienie składni mod_rewrite. Ze swojej
strony podam tylko przykład zawartości, którą stosuję do upraszczania adresów dla CMS Joomla:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
Apache jest bardzo bogatym w opcje i możliwości konfiguracyjne serwerem. W artykule tym ze
względów objętościowych została omówiona tylko bardzo niewielka część z nich. Pominięto także
zagadnienia związane z bezpieczeństwem serwerów WWW.
Jednakże treść tego artykułu może
stanowić solidną podstawę do podjęcia własnego studium serwera Apache
Artykuł opracował Mariusz Hyra, Support Online Sp. z o.o.
LINKI – ŹRÓDŁA:
1) Opracowanie własne.
Firma Support Online posiada bogate doświadczenie i ogromną
wiedzę zarówno z zakresu rozwiązań serwerów webowych, jak i
innych rozwiązań IT. Jeśli są Państwo zainteresowani otrzymaniem
oferty w zakresie serwerów www lub innych usług – prosimy o
kontakt:
Support Online Sp. z o.o.
tel. + 22 335 28 00
e-mail: [email protected]
www.support-online.pl