Apache jest najczęściej wykorzystywanym serwerem HTTP w sieci Internet. Na jego koncie jest ponad połowa wszystkich aktywnych stron internetowych, a jego atutami są moc i elastyczność.
Apache rozdziela swoje funkcje i komponenty na osobne moduły, które można dostosowywać i konfigurować indywidualnie. Podstawowym modułem opisującym poszczególną stronę lub domenę jest virtual host
.
Wspomniane moduły pozwalają administratorowi na korzystanie z jednego serwera do obsługi wielu domen lub stron z jednego interfejsu lub IP wykorzystując odpowiedni mechanizm. Jest to bardzo istotne w sytuacji, jeżeli mamy zamiar obsługiwać wiele stron poprzez jeden serwer VPS.
[toc]
Każda konfigurowana domena przekierowuje użytkowników do specjalnego katalogu mieszczącego informacje o stronie, nie informując o tym, że ten sam serwer odpowiada też za inne strony. Rozszerzenie takiego układu pod względem oprogramowania jest możliwe w zależności od tego, jakie obciążenie może obsługiwać Twój serwer.
W niniejszym przewodniku pokażemy ci jak ustawić Apache Virtual Host w systemie Ubuntu 16.04 VPS. Nauczysz się obsługiwania różnych zawartości dla różnego rodzaju użytkowników w zależności od tego, jakiej domeny oni potrzebują.
Zaczynamy
Przed rozpoczęciem niniejszego tutorialu powinieneś zainstalować Apache. Jeżeli jeszcze tego nie zrobiłeś, to możesz go zainstalować na swoim serwerze poprzez apt-get
:
sudo apt-get update
sudo apt-get install apache2
Możemy zacząć dopiero po wykonaniu powyższych punktów.
Stworzymy przykładowe VirtualHost dla example.com
oraz test.com
. W niniejszym artykule będziemy się do nich ciągle odwoływać, a Ty zastąpisz je własnymi domenami.
Jeżeli nie masz dostępnych domen do eksperymentów, możesz skorzystać z fikcyjnych.
W razie korzystania z fikcyjnych wartości, niżej znajdziesz informacje o tym, jak edytować lokalne hosty w celu przetestowania konfiguracji. Pozwoli to na sprawdzenie konfiguracji na twoim komputerze mimo, że zawartość nie będzie dostępna za pośrednictwem domeny dla innych użytkowników.
Stworzenie struktury katalogów
Najpierw powinniśmy stworzyć strukturę katalogów mieszczącą pliki stron, które będą przedstawiane użytkownikom.
Nasz document root
(najważniejszy katalog, z którego Apache czerpie zawartość do obsługi) zostanie przesłany do indywidualnych katalogów pod katalogiem /var/www
. Stworzymy katalog dla obydwu planowanych VirtualHost.
W ramkach każdego z tych katalogów stworzymy folder public_html
, w którym będą się znajdywać nasze aktualne pliki z kodem. Pozwoli to nam na osiągnięcie dodatkowej elastyczności dla naszego hostingu.
Przykładowo, dla naszych stron stworzymy następujące katalogi:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
Fragmenty zaznaczone na czerwono są nazwami domen, które zamierzamy udostępniać z naszego VPS.
Udzielenie uprawnień
Pliki w nowostworzonej strukturze katalogów są własnością root`a. W celu otrzymania możliwości modyfikowania plików przez użytkownika należy zmienić właściciela w następujący sposób:
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html
Dopiero po naciśnięciu przycisku „ENTER” zmienna $USER
stanie się użytkownikiem, w imieniu którego jesteś zalogowany. W taki sposób użytkownik staje się właścicielem subkatalogów public_html
, w których będziemy przechowywać nasze strony.
W celu uzyskania pewności, że istnieje możliwość odczytu treści głównego katalogu oraz wszystkich jego folderów i plików, powinniśmy nieco zmodyfikować uprawnienia:
sudo chmod -R 755 /var/www
Teraz Twój serwer ma niezbędne uprawnienia do udostępnienia treści, a użytkownik może tworzyć zawartość w niezbędnych folderach.
Tworzymy przykładowe strony dla każdego VirtualHost
Po stworzeniu struktury katalogów przyszedł czas na tworzenie treści do udostępnienia.
Zacznijmy od prostych stron w celach demonstracyjnych. Stwórzmy stronę index.html dla każdej z witryn.
Zacznijmy od example.com
. Otwórzmy plik index.html
w naszym edytorze poprzez wpisanie:
nano /var/www/example.com/public_html/index.html
W powyższym pliku stwórz prosty dokument HTML wskazując portal, do którego jest on podpięty. Na przykład:
<h1>Sukces! Domena example.com dziala!</h1>
Po zakończeniu zapisz i zamknij plik.
Skopiuj plik jako bazowy dla drugiej witryny wpisując:
cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html
Teraz możesz otworzyć plik i zmodyfikować niezbędne informacje:
nano /var/www/test.com/public_html/index.html
<h1>Sukces! Domena test.com dziala!</h1>
Zapisz i zamknij plik. Teraz masz strony do przetestowania konfiguracji VirtualHost.
Stworzenie nowego pliku VirtualHost
Zadaniem plików VirtualHost (Wirtualnego Hosta) jest wskazanie ścieżek oraz konfiguracji naszych wirtualnych hostów na serwerze, a konkretnie jakich reakcji należy oczekiwać od serwera Apache podczas żądania poszczególnych domen.
Standardowo Apache posiada domyślny plik Virtual Host nazywany 000-default.conf
, który możemy wykorzystać jako wzór. Skopiujemy go w celu stworzenia wirtualnego hosta dla każdej z naszych domen.
Rozpoczniemy od jednej domeny, skonfigurujemy ją, skopiujemy dla następnej domeny i wykonamy kilka dostosowań. Zgodnie z wymogami domyślnej konfiguracji systemu Ubuntu, każdy plik wirtualnego hosta powinien mieć rozszerzenie .conf
.
Stwórz pierwszy plik Virtual Host
Najpierw skopiuj plik dla pierwszej domeny:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Otwórz nowy plik w edytorze, który uwielbiasz, z uprawnieniami root`a:
sudo nano /etc/apache2/sites-available/example.com.conf
Plik będzie wyglądał mniej więcej tak (usunęliśmy komentarze, żeby plik był bardziej czytelny):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Jak widzisz, nie ma tego dużo. Dostosujemy elementy dla naszej pierwszej domeny i dołączymy dodatkowe katalogi. Ta część Virtual Host dopasuje wszystkie żądania portu 80, domyślnego portu HTTP.
W pierwszej kolejności powinniśmy zmienić katalog ServerAdmin
na adres poczty elektronicznej, za pośrednictwem której administrator będzie mógł otrzymywać maile.
ServerAdmin admin@example.com
Następnie musimy dodać dwie linii. Pierwsza z nich, ServerName
, określa bazową domenę pasującą do definicji Virtual Host. Najprawdopodobniej będzie to Twoja domena. Druga, ServerAlias
, określa dodatkowe nazwy, które powinny pasować tak samo, jak nazwa bazowa. Pomoże to nam w dopasowaniu określonych przez Ciebie hostów, takich jak www
:
ServerName example.com
ServerAlias www.example.com
Kolejną rzeczą, którą musimy zmienić dla bazowego pliku Virtual Host, jest lokalizacja dokumentu root dla tej domeny. Mamy już niezbędny katalog, więc musimy tylko zmienić katalog DocumentRoot
w celu odzwierciedlenia stworzonego przez nas katalogu:
DocumentRoot /var/www/example.com/public_html
W wyniku, nasz Virtual Host powinien wyglądać następująco:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Zapisz i zamknij plik.
Skopiuj pierwszy Virtual Host i dostosuj do drugiej domeny
Po zakończeniu tworzenia pierwszego Virtual Host, możemy zabrać się za drugi kopiując plik i dostosowując zgodnie z potrzebami.
Najpierw skopiuj to:
sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf
Otwórz nowy plik z uprawnieniami root`a w Twoim edytorze:
sudo nano /etc/apache2/sites-available/test.com.conf
Teraz musisz zmodyfikować wszelkie informacje do potrzeb drugiej domeny.
Po zakończeniu tych czynności powinno to wyglądać mniej więcej następująco:
<VirtualHost *:80>
ServerAdmin admin@test.com
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/test.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Zapisz i zamknij plik.
Uruchom nowostworzony plik Virtual Host
Przyszedł czas na uruchomienie naszych VirtualHost. Apache posiada narzędzia, które nam w tym pomogą.
Użyjemy a2ensite
w celu uruchomienia każdej ze stron:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
Następnie uruchom ponownie Apache w celu zastosowania wprowadzonych zmian:
sudo service apache2 restart
Możesz otrzymać podobny komunikat:
* Restarting web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Ta wiadomość nie ma wpływu na naszą stronę.
Skonfiguruj lokalny plik .hosts (opcjonalnie)
Jeżeli do tej pory w testowaniu nie używałeś własnych nazw domen lecz przykładowe, przyszedł czas na sprawdzenie funkcjonalności tego procesu poprzez modyfikację pliku hosts
na twoim komputerze.
Powyższa czynność zablokuje wszelkie żądania w stosunku do skonfigurowanych przez Ciebie domen, wyróżni je dla Twojego serwera VPS, tak jak by zrobił to system serwerów nazw DNS, gdybyś używał zarejestrowanych domen. Będzie to działało wyłącznie poprzez Twój komputer w celach testowych.
Przekonaj się, że wykonujesz te czynności na lokalnym komputerze, a nie na serwerze VPS. Potrzebne Ci będzie administracyjne hasło komputera lub powinieneś być członkiem grupy administracyjnej.
Jeżeli używasz Mac lub Linux, edytuj lokalny z prawami administratora:
sudo nano /etc/hosts
Instrukcję dla zmiany hostów na systemach Windows znajdziesz tu.
Dodaj publiczny adres IP twojego serwera VPS oraz domenę, której chcesz użyć.
Dla naszej domeny na dole pliku hosts dodajemy następujące linie, zakładając, że adres IP serwera VPS to 111.111.111.111
:
127.0.0.1 localhost
127.0.1.1 guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com
To przekieruje wszelkie żądania dla example.com
oraz test.com
na komputer i prześle je na nasz serwer 111.111.111.111
. Tak się powinno dziać, jeżeli nie jesteśmy właścicielem domeny, a tylko testujemy Virtual Host.
Zachowaj i zamknij plik.
Przetestuj osiągnięcia
Po skonfigurowaniu Virtual Hosts możesz łatwo przetestować swoje ustawienia przechodząc do skonfigurowanych przez Ciebie domen na Twojej przeglądarce internetowej:
http://example.com
Powinieneś zobaczyć następujący komunikat na stronie:
Sukces! Domena example.com dziala!
Podobnie będzie wyglądał komunikat dla drugiej strony:
http://test.com
Zobaczysz stworzony przez Ciebie plik dla drugiej strony:
Sukces! Domena test.com dziala!
Gratulacje! Jeżeli obydwie strony działają jak należy, to znaczy, że udało Ci się skonfigurować dwa VirtualHost na jednym serwerze.
W przypadku dostosowania plików host na Twoim komputerze, możesz usunąć linie, które służyły do przetestowania konfiguracji. Zabezpieczy to Twoje pliki hosts przed przechowywaniem zbędnych wpisów.
Jeżeli potrzebujesz dostępu na dłuższy czas, rozważ nabycie domeny dla każdej strony dostosowując je do Twojego serwera VPS.
Podsumowanie
Jeżeli wszystko zrobiłeś dobrze, powinieneś teraz mieć jeden serwer obsługujący dwie osobne domeny. Możesz poszerzyć ten proces o kolejne Virtual Host wykonując czynności opisane wyżej.
Apache może obsługiwać nieograniczoną liczbę domen, wszystko zależy wyłącznie od możliwości Twojego serwera.
Comments 3 komentarze
Michał
1)apt-get:update,upgrade,dist-upgrade
2)ifconfig (maska=netmask, adres ip=NULL)
3)Apache:apt-get install apache2;pico host1 w /etc/apache2/sites-availab
NameVirtualHost*
ServerAdmin webmaster@localhost
DocumentRoot /var/www/host1(host2
4)cd /etc/a2/sites-enabled: ln –s ../sites-available/host1(2) 01(2)0-host1(2
5)/var/www i tam mkdir host1 i host2 a w nich index.html
6)apt-getinstall bind9 i Cd /etc/bind
7)Edit named.conf.local[isi1], create 202.168.192.in-addr.arpa[isi21] i
201.168…[isi22] i z32.lab.vs[isi23]; potem bre i finguj
8)Cd /etc/apache2/sites-available i pico hostn1 i hostn2[mpia]
9)/etc/apache2/sites-enabled i ln –s ../sites-av/hostn1(2 03(40-hostn1
10)to samo co 5) a potem apg; potem instalacja rzeczy z pulpitu
11)mysql –p: create database joomladb; create user ‘root@localhost’ identified by ‘dawid1997’;
grant all on joomladb.* to Root@localhost;
12)potem exit i apg a potem Cd /var/www/hostn1 i wget[link] i unzip[plik]
Marcin
Witam, muszę przyznać, że Państwa blog pod względem ilości i przydatności informacji na temat wstępnej konfiguracji serwerów jest najlepszy z jakim się spotkałem. Brakuje mi tylko jeden ostatniej kwestii w tym artykule a mianowicie: jak dezaktywować virtual host'a bądź definitywnie go usunąć dla jednej z domen ?
Marcin
a co z uprawnieniami www-data, nie muszą zostać przyznane ?