Wirtualne hosty pod Windowsem Drukuj
Ocena użytkowników: / 3
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
czwartek, 11 lutego 2010 19:31

Częstym problemem zapracowanego webdevelopera jest sytuacja, kiedy ma on wiele projektów i tylko jeden komputer. Co wtedy zrobić? Ano, sprawić, aby twoje poszczególne projekty myślały, że są jedyne... Fachowo nazywa się taki zabieg "wirtualnym hostem".

 

Co to?

Polega na tym, że wpisując w polu adresu "projekt1" pojawia się strona projektu z katalogu `aaa', a wpisując `projekt2.haha' (tak, kropki są dozwolone) pojawia się strona projektu zawartego w katalogu `bbb'. Oczywiście, ktoś mógłby powiedzieć, że można je umieścić w katalogach `aaa' i `bbb' w documentRoot naszego serwera i wpisywać w przeglądarce "localhost/aaa" / "127.0.0.1/bbb". Może i owszem. Jednak jest jedna bardzo duża różnica. W przypadku używania wirtualnych hostów, nasza strona myśli, że jest jedyną na tym serwerze, czyli np.:

<a href="/kontakt.php">Kontakt</a>

przekieruje nas do pliku:

aaa/kontakt.php

Gdybyśmy jednak stosowali metodę katalogów w documentRoot dla różnych projektów (bez wirtualnych hostów), to dla strony "localhost/aaa" link:

<a href="/kontakt.php">Kontakt</a>

Przekierowałby nas do `localhost/kontakt.php' (czyli zupełnie innego pliku - chcemy do `localhost/aaa/kontakt.php').

 

Step by step

W poniższej poradzie będę opisywał sytuację dla:

  • Windows XP Home
  • Wamp (Apache 2.2.1, MySQL 5.1.36, PHP 5.3.0)

Sądzę, że dla innych gotowych serwerów łatwo będzie można ją także wykorzystać.

Krok 1: plik hosts

Najpierw otwórz dowolnym edytorem tesktowym (polecam geany) plik, który znajduje się tu:

C:\WINDOWS\system32\drivers\etc

Powinna zainteresować Cię ta linia:

127.0.0.1       localhost

Zauważ, że kiedy wpiszesz (musisz mieć włączony serwer - np. WAMP): "127.0.0.1" to pojawi się strona główna zawarta w katalogu z projektami twojego serwera www (czyli z documentRoot). Podobnie stanie się, kiedy wpiszesz "localhost". Sprawdź teraz, jeśli nie wierdzysz. Pamiętaj o włączeniu serwera :)

 

Nowy adres

 

Zmień teraz zawartość otwartego pliku:

127.0.0.1       localhost
127.0.0.1       youthcoders_example

Następnie zapisz plik hosts i wpisz w polu adresu "youthcoders_example". Po zatwierdzeniu powinieneś zabaczyć tę samą stronę, co po wpisaniu "localhost".

Krok 2: konfiguracja Apache'a

Teraz musimy skonfigurować serwer WWW, aby pozwalał na czytanie plików z różnych miejsc na dysku w zależności od podanego adresu.

Najpierw włączmy załączanie pliku z konfiguracją wirtualny hostów. AFAIK dawniej informacje te były umieszczone bezpośrednio w pliku `httpd.conf'. W nowszych wersjach serwera Apache jest przeznaczony do tego specjalny plik `httpd-vhosts.conf'.

 

Załączenie pliku `httpd-vhosts.conf'

 

Przejdź do pliku `httpd.conf', u mnie jest on w:

 

C:\wamp\bin\apache\Apache2.2.11\conf\httpd.conf

U Ciebie może być gdzie indziej, ale raczej nie powinno być problemów z jego znalezieniem. Jeśli używasz WAMP-a łatwo jest go uruchomić:

Uruchomienie pliku httpd.conf w WAMP-ie

Jeśli masz już otwarty plik `http.conf' znajdź taki fragment:

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

i odkomentuj drugą linię, przez usunięcie "#" z początku.

# Virtual hosts
Include  conf/extra/httpd-vhosts.conf

W tym momencie plik `httpd-vhosts.conf' (po restarcie serwera) zostanie załadowany. Czas jeszcze umieścić w nim treść pozwalająca na wykorzystanie mechanizmu wirtualnych hostów.

 

Konfiguracja wirtualnych hostów

 

Otwórz plik `httpd-vhosts.conf'. Jeśli używasz WAMP-a powinien być w katalogu:

C:\wamp\bin\apache\Apache2.2.11\conf\extra

W pliku tym teraz najprawdopodobniej znajduje się coś takiego:

NameVirtualHost *:80
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <virtualhost> block.</virtualhost>
<virtualhost></virtualhost>
    ServerAdmin webmaster@dummy-host.localhost
    DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.localhost"
    ServerName dummy-host.localhost
    ServerAlias www.dummy-host.localhost
    ErrorLog "logs/dummy-host.localhost-error.log"
    CustomLog "logs/dummy-host.localhost-access.log" common
 
<virtualhost></virtualhost>
    ServerAdmin webmaster@dummy-host2.localhost
    DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.localhost"
    ServerName dummy-host2.localhost
    ErrorLog "logs/dummy-host2.localhost-error.log"
    CustomLog "logs/dummy-host2.localhost-access.log" common

Zakładam, że umieścisz wszystkie swoje wirtualne hosty w katalogu:

D:\vhosts

W takim razie w pliku `httpd-vhosts.conf' umieść takie wpisy (poprzednie możesz usunąć):

<directory></directory>
    Order Deny,Allow
    Allow from all
 
NameVirtualHost *:80
<virtualhost></virtualhost>
    DocumentRoot D:\vhosts\aaa
    ServerName youthcoders_example

Zapisz plik.

 

Umieszczenie plików projektu

 

  • Utwórz katalog `D:\vhosts\aaa'
  • Stworz w tym katalogu plik `index.php'
  • Zamieść w tym pliku taką treść:

echo 'Jestem wirtualnym hostem!';
?>

Odpalanie strony

Jeśli wykonałeś już wszystkie kroki, zrestartuj serwer www.

Restart serwera WAMP

Następnie uruchom dowolną przeglądarkę i wpisz w pole adresu:

http://youtcoders_example

Twoim oczom powinna pojawić się strona z napisem "Jestem wirtualnym hostem!".

 

Zadanie domowe

Stwórz jeszcze kilka dodatkowych wirtualnych hostów (pamiętaj, o dodaniu odpowiednich wpisów w pliku hosts).

 

By wiedzieć więcej

Oczywiście wirtualne hosty są zagadnieniem dużo głębszym niż to, co tu przedstawiłem. Jeśli chcesz się dowiedzieć więcej, to na pewno rzetelnym źródłem będzie dokumentacja Apache'a.

Jak zawsze przydatny będzie wujek google :P