Od jakiegoś czasu można zaobserwować niesłychany wzrost popularności serwerów WWW. O ile jakiś czas temu firma czy organizacja mogła zadowolić się stroną WWW zamieszczoną w podkatalogu jakiegoś serwera, to dzisiaj ambicją każdego jest posiadać własny adres (najlepiej bardzo krótki i prosty do zapamiętania – np.w często opisywanej postaci http://www.firma.com.pl/). Czy to oznacza, że dla każdego serwera WWW trzeba poświęcać osobny komputer? Byłoby to ogromnym marnotrawstwem i czyniłoby takie rozwiązanie mało opłacalnym. Z pomocą przychodzi mechanizm tzw. serwerów wirtualnych. Wirtualne serwery są niezwykle przydatne kiedy chcemy, aby nasz serwer obsługiwał kilka witryn widocznych pod innymi adresami URL niebędącymi nazwą serwera z katalogiem tych witryn, w którym znajduje się strona. Umożliwia to dokładna personalizacje ustawień dla każdego i tworzenie osobnych dzienników serwera.
Uruchomienie serwerów wirtualnych możemy uzyskać na dwa sposoby:
Uruchomić pojedynczą kopie serwera obsługującą dwie lub więcej witryn z wykorzystaniem serwerów wirtualnych. Rozwiązanie to jest najczęściej stosowane.
Uruchomienie dwóch lub więcej kopi serwera Apacze, z których każda obsługuje osobną witrynę. Rozwiązanie to wykorzystuje się bardzo rzadko.
Serwery Wirtualne można tworzyć na podstawie adresów IP czyli do jednego urządzenia sieciowego przypisanych jest kilka adresów IP z odpowiadającym innym adresem domenowym lub poprzez identyfikowanie serwerów różnymi adresami URL związanymi z tym samym adresem IP.
Rozwiązanie wykorzystujące identyfikacje serwerów poprzez nazwy domenowe jest najbardziej polecane i bazuje ono na protokole HTTP/1.1. Rozwiązanie to wykorzystuje jeden adres IP, a rozróżnianie polega na zdefiniowaniu rożnych nazw domeny np. forma.com.ploraz biuro.firma.com.pl oczywiście nazwy te muszą być zarejestrowane w systemie DNS.
Apache serwery wirtualne – przykłady
<VirtualHost firma.com.pl>
ServerAdmin administartork@firma.com.pl
DocumentRoot /usr/Apache2/httdocs
SerwerName firma.com.pl
(…) # tu inne parametry
ErrorLog /usr/Apache2/logs/error_log
TransferLog /usr/Apache2/logs/access_log
</VirtualHost>
<VirtualHost biuro. firma.com.pl>
ServerAdmin administartor@firma.com.pl
DocumentRoot /usr/www/biuro
SerwerName biuro.firma.com.pl
(…) # tu inne parametry
ErrorLog /usr/www/biuro/logs/error_log
TransferLog /usr/www/biuro/logs/access_log
</VirtualHost>
W tym przykładzie kluczowym elementem jest dyrektywa NameVirtualHost,która informuje serwer że żądanie kierowane jest do danego adresu IP i powinno być rozdzielone w zależności od nazwy domenowej witryny.
Dyrektywa: NameVirtualHost
Wartości: Adres IP port
Użycie: Konfiguracja główna
Opis: Umożliwia zdefiniowanie adresu IP oraz portu wykorzystywane przez serwery wirtualne identyfikowane za pomocą nazw.
Identyfikacja serwerów wirtualnych za pomocą adresów IP jest w Internecie ciągłe dość popularna mimo iż dostępny zakres adresów drastycznie zmalał.
W protokole HTTP/1.0 identyfikacja stron możliwa była jedynie w oparciu o numery IP. Dopiero protokół HTTP/1.1 wprowadził metodę umożliwiającą przesłanie przez przeglądarkę nazwy domenowej serwera.
Wielu administratorów korzysta z adresu IP ze względu na to, że starsze przeglądarki nie będą udostępniały możliwości dostępu do serwera Apache
<VirtualHost 83.210.159.2>
ServerAdmin administartork@firma.com.pl
DocumentRoot /usr/Apache2/httdocs
SerwerName firma.com.pl
ErrorLog /usr/Apache2/logs/error_log
TransferLog /usr/Apache2/logs/access_log
</VirtualHost>
<VirtualHost 83.210.159.3>ServerAdmin administartor@firma.com.pl
DocumentRoot /usr/www/biuro
SerwerName biuro.firma.com.pl
ErrorLog /usr/www/biuro/logs/error_log
TransferLog /usr/www/biuro/logs/access_log
</VirtualHost>
Ostatnią metodą konfiguracji serwerów wirtualnych jest identyfikacja oparta na numerach portów. Zaletą tej techniki jest uruchomienie większej ilości serwerów wirtualnych z użyciem jednego adresu IP i pojedynczej nazwy domenowej.
Listen 8080
<VirtualHost 83.210.159.2:80>
ServerAdmin administartork@firma.com.pl
DocumentRoot /usr/Apache2/httdocs
SerwerName firma.com.pl
ErrorLog /usr/Apache2/logs/error_log
TransferLog /usr/Apache2/logs/access_log
</VirtualHost>
<VirtualHost 83.210.159.2:8080>ServerAdmin administartor@firma.com.pl
DocumentRoot /usr/www/biuro
SerwerName biuro.firma.com.pl
ErrorLog /usr/www/biuro/logs/error_log
TransferLog /usr/www/biuro/logs/access_log
</VirtualHost>
Ze względu na to, że metoda jest oparta na metodzie opierającej się na adresach IP do obsługi nie jest potrzebny protokół HTTP/1.1.
Jeżeli będziemy chcieli obejrzeć stronębiuro.firma.pl, to w przeglądarce musimy podać adres: firma.pl:8080. Z tego powodu ta metoda nie jest zbyt popularna wśród użytkowników Internetu.
Czasami istnieje potrzeba, by dany serwer wirtualny był widoczny pod wieloma nazwami ze względu na przyzwyczajenia użytkowników podczas wpisywania adresów w przeglądarce. Najczęstszym przypadkiem jest wpisywanie adresu bez znaków WWW. Rozwiązanie tego problemu stanowi dyrektywa ServerAlias, która umożliwia zdefiniowanie aliasów identyfikujących serwer wirtualny.
<VirtualHost 83.210.159.2>
ServerAdmin administartork@firma.com.pl
DocumentRoot /usr/Apache2/httdocs
SerwerName firma.com.pl
ServerAlias www.firma.pl
ErrorLog /usr/Apache2/logs/error_log
TransferLog /usr/Apache2/logs/access_log
</VirtualHost>
Dyrektywa:ServerAlias
Użycie:Serwery wirtualne
Opis:Dyrektywa ta pozwala określić synonimy nazw (aliasy) danego serwera wirtualnego
Możliwości jest oczywiście o wiele więcej, ale przedstawione powyżej pozwolą na podstawową konfigurację.