Dlaczego?

Często spotykam się z zainteresowaniem rozwiązaniami vhostów (zwłaszcza dla programistów/opiekunów wielu serwisów) jednak ciężko jest przebrnąć przez kilka kwestii. Tworzenie vhostów jest bardzo proste jednak po drodze jest parę kruczków, które mogą niejednego doprowadzić do białej gorączki. Wystarczy poznać zestaw kilku zasad i korzystanie z vhostów stanie się tylko i wyłącznie przyjemnością. Zapraszam do lektury!

o Virtual Host’ach

Bardzo często zdarza się, że mamy do dyspozycji tylko jedną maszynę a chcemy/musimy posiadać kilka serwisów (hostów). Jeśli na maszynie zainstalowany jest Apache to z pomocą przychodzi nam rozwiązanie zwane „Virtual Hosts”. Dzięki temu rozwiązaniu możemy zdefiniować w serwerze klika niezależnych hostów, działających na własnych domenach i z własną konfiguracją.

Jeśli posiadasz już zainstalowany serwer i chciałbyś stworzyć wirtualne hosty musisz wykonać 3 czynności:

  1. Stworzyć nazwę domenową
  2. Utworzyć wpis vhosta w pliku konfiguracyjnym
  3. Zmodyfikować uprawnienia

1. Nazwa domenowa

Dzięki nazwom domenowym nie musimy chodzić po stronach za pomocą adresów IP tylko za pomocą przyjaznych dla nas nazw. Nazwy te tłumaczone są przez serwery DNS na IP aby przeglądarka wiedziała gdzie ma się faktycznie połączyć. Na każdym komputerze (czy to z Windowsem czy Linuxem) można stworzyć własną uproszczoną wersję takiego serwera – a konkretnie jest to plik w którym zdefiniowane są nazwy domenowe i przypisane im konkretne IP.

W systemie Windows jest to plik: C:\Windows\System32\drivers\etc\hosts
W systemie Linux jest to plik /etc/hosts

Posiada on mniej więcej taką strukturę:

IP domena
127.0.0.1 localhost

IP 127.0.0.1 jest adresem własnego komputera. A „localhost” jest nazą domenową dla tego IP. Jeśli wpiszesz w przeglądarce „localhost” to podłączysz się sam do siebie (jeśli masz działający serwer)

Gdy wpisujesz w przeglądarkę „wp.pl” to faktycznie łączysz się z pewnym adresem IP, który „podpowiedział” serwer DNS. Jednak można wymusić aby pewne nazwy domenowe łączyły się na inne IP. Sprawdźmy to:

Otwórz wspomniany plik „hosts” i dopisz w nim na koniec taką linijkę:

74.125.43.147 onet.pl

Zapisz plik i spróbuj odwiedzić stronę onet.pl – niespodzianka? Ustawiłeś właśnie aby domena onet.pl wskazywała na IP google. Dobra jeśli już znamy zasadę działania to usuń ten wpis żebyś nie zapomniał 🙂

Zamiast tego utwórz wpis

127.0.0.1 pierwszyvhost
127.0.0.1 drugivhost

W ten sposób stworzysz drugą nazwę domenową dla własnego komputera. Tworzymy to po to, gdyż apache rozpoznaje który vhost ma uruchomić właśnie po nazwie domenowej. IP mamy tylko jedno, ale różne domeny wskazują na to samo IP i po tych nazwach właśnie apache wie co uruchomić.

2. Tworzenie vhosta

W zasadzie Apache posiada główny plik konfiguracyjny httpd.conf i to w nim powinno dokonywać się wszelkich zmian. Jednakże w zależności od dystrybucji ten plik może być podzielony na inne mniejsze pliki które zawierają konkretne rzeczy (np właśnie vhosty).

Jeśli posiadasz pakiet XAMPP to otwórz plik i przejdź na koniec:

c:\xampp\apache\conf\extra\httpd-vhosts.conf

Jeśli posiadasz zwykłą dystrybucję bądź nie ma osobnego pliku na vhosty to otwórz plik httpd.conf i przejdź na koniec

VHost składa się z pewnego bloku informacji obowiązujących w określonej strukturze drzewa. Struktura takiego podstawowego bloku przedstawia się następująco:

[code lang=”bash”]
<VirtualHost *:80>
ServerAdmin [adres email administratora]
DocumentRoot [ścieżka do katalogu]
ServerName [nazwa domenowa serwera]
ServerAlias [alias nazwy serwera – np druga nazwa]
ErrorLog [plik z logami błędów]
</VirtualHost>
[/code]

Dopisz zatem następującą treść (nie potrzebujemy wszystkich wpisów)

[code lang=”bash”]
<VirtualHost *:80>
ServerAdmin adres@email.pl
DocumentRoot C:\www\vhost1\html
ServerName pierwszyvhost
</VirtualHost>

<VirtualHost *:80>
ServerAdmin adres@email.pl
DocumentRoot C:\www\vhost2\html
ServerName drugivhost
</VirtualHost>
[/code]

Zapisz plik. Utwórz oczywiście wymienione katalogi i wrzuć do każdego katalogu „html” jakiś plik index.html (np jeden o treści „Pierwszy vhost” a drugi o treści „Drugi vhost”) i vhosty gotowe… no cóż… prawie….

Zrestartuj serwer apache (w XAMPP musisz włączyć i wyłączyć serwer), lub w konsoli na linuxie polecenie:

/etc/init.d/httpd restart

czy tez inne odpowiednie dla Twojej dystrybucji.

Wpisz teraz w przeglądarce

http://pierwszyvhost

lub

http://drugivhost

W obu przypadkach prawdopodobnie otrzymasz komunikat „Forbidden” i teraz przechodzimy do punktu 3

3. Uprawnienia

Problem z uprawnieniami wynika z tego, że dla głównego drzewa serwera zostały ograniczone możliwości. Metodą najprostszą jest odnalezienie w pliku httpd.conf następującej sekcji:

[code lang=”bash”]
<Directory />
[/code]

Domyślnie znajdują się w niej opcje ustawione w taki sposób:

[code lang=”bash”]
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
[/code]

Musisz zmienić je następujące:

[code lang=”bash”]
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
[/code]

Zrestartuj ponownie serwer apache. Wpisz w przeglądarce:

http://pierwszyvhost

Hurra działa! (a przynajmniej powinno). Jednak gdy wpiszesz

http://drugivhost

To prawdopodobnie nie zadziała. Jest to związane z nasłuchiwaniem portów. Musisz odnaleźć opcję:

[code lang=”bash”]
NameVirtualHost *:80
[/code]

Jeśli jest zakomentowana (znajdują się przed nią znaki „#” czyli jest wyłączona) to usuń te znaki aby doprowadzić ją do postaci j/w. Ponownie musisz oczywiście zrestartować serwer. Jeśli nie masz tej opcji ani w pliku httpd-hosts.conf ani w httpd.conf to dopisz taką linijkę samodzielnie (tylko jeśli drugi host nie działa).

Po restarcie serwera drugi vhost również powinien działać.

Podsumowanie

Mam nadzieję, że przybliżyłem nieco tematykę co pozwoliło osobom zainteresowanym zrealizować swoje potrzeby. Wszelkie uwagi i wątpliwości proszę zgłaszać za pomocą poniższego narzędzia.

Pozdrawiam.

7 thoughts on “Tworzenie VHost’a w Apache

  1. mam problem. Drugi vhost działał od początku jednak pierwszy nadal nie działa ;/

  2. Dzięki za pomoc – fajne to 🙂
    Jeszcze jedna uwaga: należy włączyć opcję „Include conf/extra/httpd-vhosts.conf” (skasować „#”)

  3. Ja musiałem vhosts ustawić troszeczkę inaczej, mianowicie:
    NameVirtualHost *:80

    ServerName localhost
    ServerAlias dev
    DocumentRoot "d:/serwer"

    ServerName strona.dev
    DocumentRoot "d:/serwer/strona/www"

    Dzięki temu teraz 127.0.0.1, dev, localhost zwracają mój domyslny katalog, a strona swój własny.

Comments are closed.