Tworzenie VHost’a w Apache
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:
- Stworzyć nazwę domenową
- Utworzyć wpis vhosta w pliku konfiguracyjnym
- 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.
świetne, dzięki, pomogło!
mam problem. Drugi vhost działał od początku jednak pierwszy nadal nie działa ;/
a czy dodałeś odpowiednie wpisy do /etc/hosts?
Dzięki za pomoc – fajne to 🙂
Jeszcze jedna uwaga: należy włączyć opcję „Include conf/extra/httpd-vhosts.conf” (skasować „#”)
Vhosts to bardzo pomocna rzecz;)
Świetnie stary. Bardzo mi to pomogło. Dobra robota. Możesz być z siebie dumny!
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.