W tym krótkim przewodniku opiszę procedurę tworzenia takiego vhosta w oparciu o pliki konfiguracyjne Apache'a na Windowsie. Na Linuxach konfiguracja jest analogiczna, ale różni się kilkoma formalnymi zabiegami.
Czym jest wirtualny host? Vhost jest aliasem nakładanym na dany katalog na serwerze, do którego to katalogu przypisujemy odpowiednią subdomenę, przy czym katalog taki staje się Document Rootem dla tworzonej subdomeny.
Przykładowo, dysponując lokalnym serwererem localhost z ustawionym Document Root na dajmy na to przykładowo:
- C:\WWW\
możemy stworzyć w nim kilka podfolderów, np.:
- C:\WWW\subdomena1
- C:\WWW\subdomena2
- ... itd.
i następnie utworzyć vhosty kierujące na te katalogi:
- http://localhost >>> C:\WWW\
- http://subdomena1.localhost >>> C:\WWW\subdomena1\
- http://subdomena2.localhost >>> C:\WWW\subdomena2\
- ... itd.
gdzie oczywiście vhostami są tutaj subdomena1.localhost i subdomena2.localhost.
Czego będziemy potrzebować, poza oczywiście zainstalowanym Apachem?
- dostępu do katalogu systemowego, a więc uprawnień administratora
- dowolnego edytora tekstowego, może być zwykły systemowy Notepad (od siebie polecam Notepada++ do wszelakich "małych" operacji na plikach tekstowych)
1) hosts - konfiguracja DNS
Pierwsze co musimy zrobić to dostać się do pliku, który robi w systemie za pierwszy odpytywany DNS. W Windowsie plik ten znajdziemy tutaj:
- C:\Windows\System32\drivers\etc\hosts
W Linuxach:
- /etc/hosts
Tutaj mała uwaga: musimy otworzyć go do edycji w trybie administracyjnym, inaczej nie będziemy mieć możliwości zapisania w nim zmian. Aby tego dokonać (w systemach windowsowych), klikamy PPM na edytorze tekstowym jakiego chcemy użyć i wybieramy opcję Uruchom jako administrator.
W unixowych systemach dokonujemy tego przez polecenie sudo.
Otwieramy plik do edycji i naszym oczom pokaże się coś mniej więcej takiego:
- # 102.54.94.97 rhino.acme.com # source server
- # 38.25.63.10 x.acme.com # x client host
- # localhost name resolution is handled within DNS itself.
- # 127.0.0.1 localhost
- # ::1 localhost
- 127.0.0.1 localhost
Budowa pliku jest bardzo prosta:
W oddzielnych linijkach podajemy przypisania danych hostów do adresów IP.
Zapis:
- 127.0.0.1 localhost
mówi systemowi, że hosta localhost ma on w pierwszej kolejności szukać pod adresem 127.0.0.1, który jest lokalnym adresem naszej maszyny, tzw. loopback-iem. Adres 127.0.0.1 zawsze prowadzi do nas samych. W naszym przypadku prowadzi również do naszego lokalnego serwera. Kolejne adresy podajemy tutaj w oddzielnych linijkach, na zasadzie:
- ADRES_IP host
Dodajmy więc kilka subdomen:
- 127.0.0.1 subdomena1.localhost
- 127.0.0.1 subdomena2.localhost
Mała uwaga: jeśli chcemy wejść na localhosta z www na początku, to również i to musimy uwzględnić w pliku hosts.
Nasz plik hosts może więc przyjąć taką postać:
- ....
- # 102.54.94.97 rhino.acme.com # source server
- # 38.25.63.10 x.acme.com # x client host
- # localhost name resolution is handled within DNS itself.
- # 127.0.0.1 localhost
- # ::1 localhost
- 127.0.0.1 localhost
- 127.0.0.1 subdomena1.localhost
- 127.0.0.1 subdomena2.localhost
- 127.0.0.1 www.localhost
- 127.0.0.1 www.subdomena1.localhost
- 127.0.0.1 www.subdomena2.localhost
Zapisujemy plik i kierujemy się w stronę Apacha.
Najpierw oczywiście utwórzmy odpowiednie foldery, do których będziemy kierowali vhosty, np.:
- C:\WWW\subdomena1
- C:\WWW\subdomena2
Jest to bardzo ważne, aby katalogi istniały, gdyż w przeciwnym wypadku Apache odmówi nam dalszej współpracy, gdy nie znajdzie katalogu na jaki będzie miał kierować ruch.
2) httpd.conf - konfiguracja Apache'a
Teraz możliwe są dwie opcje, zależnie od konfiguracji naszego Apache'a. Możemy mieć właczoną, lub wyłaczoną obsługę vhostów. Domyślnie plik z vhostami nie jest dołączany do konfiguracji Apache'a - jeśli tak jest w naszym przypadku, zmienimy to:Otwieramy do edycji plik konfiguracyjny Apache'a (ponownie na prawach administracyjnych!):
- ścieżka/do/apache2/conf/httpd.conf
i szukamy linii wyglądającej tak:
- Include conf/extra/httpd-vhosts.conf
Linijka ta odpowiada za dołączenie do konfiguracji pliku z definicjami vhostów.
Jeśli przed słowem Include znajduje się znak komentarza (#) to usuwamy go i zapisujemy plik.
Uwaga: w zależności od wersji i konfiguracji Apache'a plik z definicją v-hostów może posiadać inną nazwę, może go też nie być w ogóle, wtedy definiujemy vhosty bespośrednio w pliku httpd.conf lub apache2.conf!
3) httpd-vhosts.conf - konfiguracja wirtualnych hostów
Jeżeli w naszej instaalcji Apache'a istnieje poniższy plik, to otwieramy go (ponownie z administracyjnymi uprawnieniami):
- ścieżka/do/apache2/conf/extra/httpd-vhosts.conf
Plik powinien wyglądać będzie mniej więcej tak:
- # Virtual Hosts
- #
- # Required modules: mod_log_config
- # If you want to maintain multiple domains/hostnames on your
- # machine you can setup VirtualHost containers for them. Most configurations
- # use only name-based virtual hosts so the server doesn't need to worry about
- # IP addresses. This is indicated by the asterisks in the directives below.
- #
- # Please see the documentation at
- # <URL:http://httpd.apache.org/docs/2.4/vhosts/>
- # for further details before you try to setup virtual hosts.
- #
- # You may use the command line option '-S' to verify your virtual host
- # configuration.
- #
- # 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 *:80>
- ServerAdmin webmaster@dummy-host.example.com
- DocumentRoot "c:/www"
- ServerName localhost
- ServerAlias localhost
- ErrorLog "logs/localhost-error.log"
- CustomLog "logs/localhost-access.log" common
- </VirtualHost>
Każdy blok <VirtualHost>...</VirtualHost> to definicja oddzielnego vhosta.
Dodajmy więc nasze vhosty, które zdefiniowaliśmy w pliku hosts jako:
- subdomena1.localhost
- subdomena2.localhost
Zrobimy to, dodając kolejny blok z definicją:
- <VirtualHost *:80>
- ServerAdmin nasz@email.com
- DocumentRoot "c:/www/subdomena1"
- ServerName subdomena1.localhost
- ServerAlias subdomena1.localhost
- ErrorLog "logs/subdomena1-error.log"
- CustomLog "logs/subdomena1-access.log" common
- </VirtualHost>
I analogiczny blok dla subdomeny2:
- <VirtualHost *:80>
- ServerAdmin nasz@email.com
- DocumentRoot "c:/www/subdomena2"
- ServerName subdomena2.localhost
- ServerAlias subdomena2.localhost
- ErrorLog "logs/subdomena2-error.log"
- CustomLog "logs/subdomena2-access.log" common
- </VirtualHost>
Każda taka konfiguracja vhosta jak widzimy składa się z kilku podstawowych elementów:
- <VirtualHost *:80>
Definiuje na jakim porcie dla tego hosta ma nasłuchiwać serwer, domyślnie jest to port HTTP 80, czasami 8080.
- ServerAdmin nasz@email.com
Określna adres email admina serwera, możemy tutaj podać cokolwiek
- DocumentRoot "c:/www/subdomena2"
Wskazuje pełną ścieżkę do katalogu głównego na jaki prowadzić będzie adres hosta
- ServerName subdomena2.localhost
Definiuje nazwę hosta, musi odpowiadać wpisowi w pliku hosts
- ServerAlias subdomena2.localhost
Definiuje alias dla hosta, musi odpowiadać wpisowi w pliku hosts
- ErrorLog "logs/subdomena2-error.log"
Ustawia plik z logami błędów na logs/subdomena2-error.log
- CustomLog "logs/subdomena2-access.log" common
Ustawia plik z logami dostępu do hosta na logs/subdomena2-access.log
Tutaj mała uwaga - jeśli chcemy korzystać również z przedrostka www. przy podawaniu nazwy subdomeny, powinniśmy zastosować wildcarda (*) w definicji ServerAlias, tj.:
- ServerAlias *.subdomena1.localhost
Nasz plik finalnie wyglądać będzie więc mniej więcej tak:
- # Virtual Hosts
- #
- # Required modules: mod_log_config
- # If you want to maintain multiple domains/hostnames on your
- # machine you can setup VirtualHost containers for them. Most configurations
- # use only name-based virtual hosts so the server doesn't need to worry about
- # IP addresses. This is indicated by the asterisks in the directives below.
- #
- # Please see the documentation at
- # <URL:http://httpd.apache.org/docs/2.4/vhosts/>
- # for further details before you try to setup virtual hosts.
- #
- # You may use the command line option '-S' to verify your virtual host
- # configuration.
- #
- # 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 *:80>
- ServerAdmin webmaster@dummy-host.example.com
- DocumentRoot "c:/www"
- ServerName localhost
- ServerAlias *.localhost
- ErrorLog "logs/localhost-error.log"
- CustomLog "logs/localhost-access.log" common
- </VirtualHost>
- <VirtualHost *:80>
- ServerAdmin nasz@email.com
- DocumentRoot "c:/www/subdomena1"
- ServerName subdomena1.localhost
- ServerAlias *.subdomena1.localhost
- ErrorLog "logs/subdomena1-error.log"
- CustomLog "logs/subdomena1-access.log" common
- </VirtualHost>
- I analogiczny blok dla subdomeny2:
- <VirtualHost *:80>
- ServerAdmin nasz@email.com
- DocumentRoot "c:/www/subdomena2"
- ServerName subdomena2.localhost
- ServerAlias *.subdomena2.localhost
- ErrorLog "logs/subdomena2-error.log"
- CustomLog "logs/subdomena2-access.log" common
- </VirtualHost>
Zapisujemy plik.
Poprawność konfiguracji vhostów możemy zweryfikować w konsoli, wpisując:
- ścieżka/do/apache2/bin/httpd -S
Jeśli wszystko jest OK, to restartujemy Apache'a, możemy to zrobić poleceniem:
- ścieżka/do/apache2/bin/httpd -k restart
To wszystko.
Od tej chwili możemy korzystać z naszych wirtualnych hostów pod adresami:
- http://subdomena1.localhost
- http://subdomena2.localhost
Polecam naprawdę używanie vhostów do pracy nad różnymi aplikacjami.
Jest to bardzo wygodne i efektywne rozwiązanie separujące nam aplikacje, nad którymi pracujemy do oddzielnych od siebie domen. Wymaga to jak widać odrobiny czasu na konfigurację, ale zaręczam, że naprawdę warto pracować w taki właśnie sposób, zamiast robić to na zasadzie:
- http://localhost/aplikacja1
- http://localhost/aplikacja2
- ...itd
Uwaga: powyższa konfiguracja została opisana na podstawie przykładowej konfiguracji serwera Apache 2.4.9 x64 pracującego pod systemem Windows. Dla innych wersji Apache'a oraz dla wersji pod systemy unixowe może się ona lekko różnić.
Solidnie napisane. Pozdrawiam i liczę na więcej ciekawych artykułów.
OdpowiedzUsuńCałkowicie się na tym nie znam ale za to jestem zdania, że bardzo ważną sprawą jest to aby na dzień dzisiejszy mieć fajną stronę internetową. Myślę, że właśnie takie prace zdecydowanie najlepiej jest zlecić firmie https://stronywww.kolobrzeg.pl/ która zna się doskonale na budowaniu stron www.
OdpowiedzUsuńBardzo fajnie opisany artykuł. Gdyby jednak ktoś miał nadal problem z instalacją i konfiguracją to zrobiłem szczegółowy poradnik jak krok po kroku zainstalować i skonfigurować serwer lokalny z obsługą wielu stron, PHP i mySQL: https://antosik.dev/poradniki/instalacja-serwera-lokalnego-z-obsluga-wielu-stron/
OdpowiedzUsuń