Software


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 sites-available, 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:

  1. w katalogu:/var/www - tworzymy nowy plik o nazwie test.php
  2. w pliku tym umieszczamy następujący kawałek kodu php:
    <?
    phpinfo();
    ?>
  3. nadajemy plikowi odpowiednie prawa poleceniem: chmod 755 test.php
  4. z poziomu przeglądarki www kierujemy wywołanie do nowo utworzonego pliku - http://adresserwera/test.php

(Zobacz szersze omówienie funkcji phpinfo())

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.

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

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.
ŹRÓDŁA: Opracowanie własne.

Dodał: Paweł​Dzedzej
Dział: Software


 

ComputerSun.pl na FaceBooku
Polecamy lekturę:

Tworzenie serwisów WWW. Pierwsza pomoc



X

Zapisz się na biuletyn serwisu ComputerSun.pl, aby otrzymać poradnik:

Zabezpieczanie sieci bezprzewodowych. Przydatne wskazówki jak chronić sieć domową przed intruzami

Imię:  
Email:
Tak, akceptuję Politykę Prywatności