Baza wiedzy

Zastanawiasz się, jak działają poszczególne usługi STATNET Online? Skorzystaj z naszej bazy wiedzy. Znajdziesz tu poradniki oraz odpowiedzi na najczęściej zadawane pytania naszych klientów.

VPS: jak skonfigurować wirtualne hosty Apache w systemie Debian 8

Wprowadzenie

Serwer internetowy Apache jest najpopularniejszym sposobem na obsługę zawartości w Internecie.  Stanowi ponad połowę wszystkich aktywnych stron internetowych i jest niezwykle elastyczny.

Apache dzieli funkcjonalność i komponenty na pojedyncze jednostki, które możemy dostosować niezależnie od siebie. Jednostkę podstawową opisująca pojedynczą witrynę lub domenę nazywamy wirtualnym hostem.

Korzystając z wirtualnych hostów, możemy użyć jednego serwera do obsługi wielu domen lub witryn z pojedynczego interfejsu lub adresu IP, korzystając z mechanizmu dopasowania. Konfigurujemy żądania domeny, tak aby kierować użytkownika do określonego katalogu zawierającego informacje o tej witrynie. Innymi słowy, można obsługiwać więcej niż jedną witrynę sieci Web na jednym serwerze. Ten sposób może być rozwijany bez jakiegokolwiek limitu, dopóki serwer radzi sobie z obciążeniem.

W tym samouczku utworzymy dwa wirtualne hosty Apache na serwerze Debian 8, które będą zawierać odmienną treść, w zależności od odwiedzanej przez użytkowników domeny.

Wymagania wstępne

Aby móc postępować zgodnie z kolejnymi instrukcjami musimy posiadać:

  • Serwer Debian 8 z użytkownikiem innym niż administrator, który posiada uprawnienia sudo.
  • Apache, który został zainstalowany i skonfigurowany w Debianie 8.

W tym przewodniku utworzymy wirtualne hosty dla example.com i test.com, ale możemy zastąpić je własnymi domenami lub wartościami. 

Pozwala to przetestować konfigurację z lokalnego komputera.

Krok 1 – Tworzenie struktury katalogów

Pierwszym krokiem, jaki zamierzamy podjąć, jest utworzenie struktury katalogowej, która będzie przechowywała dane witryny, udostępniane odwiedzającym.

Nasz root – katalog najwyższego poziomu, który jest przeszukiwany przez Apache, aby znaleźć zawartość, która ma być obsługiwana, powinna być ustawiona w osobnych katalogach poniżej /var/www. Tworzymy katalog dla każdego wirtualnego hosta, który skonfigurujemy.

W każdym z tych katalogów tworzymy folder o nazwie, public_html przechowujący strony internetowe, które chcemy za jego pomocą obsługiwać. Daje to nam nieco większą elastyczność w stosowaniu bardziej skomplikowanych aplikacji internetowych w przyszłości; folder public_html będzie zawierał treść, którą chcemy udostępniać, a folder nadrzędny może posiadać skrypty lub kod aplikacji w celu wspierania stron.

Tworzymy katalogi za pomocą następujących poleceń:

$ sudo mkdir -p /var/www/example.com/public_html
$ sudo mkdir -p /var/www/test.com/public_html

Ponieważ utworzyliśmy katalogi sudo, są one własnością głównego użytkownika. Jeśli chcemy, aby nasz zwykły użytkownik mógł modyfikować pliki w katalogach internetowych, zmieniamy wartości:

$ sudo chown -R $USER:$USER /var/www/example.com/public_html
$ sudo chown -R $USER:$USER /var/www/test.com/public_html

Zmienna $USER wykorzystuje dane użytkownika, który jest aktualnie zalogowany po naciśnięciu ENTER. W ten sposób nasz zwykły użytkownik ma dostęp do podkatalogów public_html, w których przechowywane będzie treść.

Powinniśmy również zmodyfikować nasze uprawnienia, aby zapewnić dostęp do odczytu do ogólnego katalogu sieciowego oraz wszystkich plików i folderów, w nim zawartych, w celu umożliwienia prawidłowego wyświetlania stron. 

Używamy poniższej komendy, aby zmienić uprawnienia do folderu /var/www i jego folderów podrzędnych.

$ sudo chmod -R 755 /var/www

Nasz serwer internetowy powinien teraz mieć uprawnienia, których potrzebuje do wyświetlania treści, a my powinniśmy mieć możliwość tworzenia zawartości w folderach. 

Teraz stworzymy plik HTML dla każdej z witryn. Mamy już strukturę katalogową, to opublikujmy nieco treści.

Krok 2 – Tworzenie domyślnych stron dla każdego hosta wirtualnego.

Stwórzmy index.html dla każdej ze stron. Pomoże nam to w poprawnym skonfigurowaniu naszych wirtualnych hostów.

Zacznijmy od strony example.com. Edytujemy plik index.html przy użyciu następującej komendy:

$ nano /var/www/example.com/public_html/index.html

W tym pliku tworzymy prosty dokument HTML, który wskazuje, że przeglądający szuka strony głównej example.com:

/var/www/example.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

Zapisujemy i zamykamy plik po zakończeniu.

Teraz skopiujmy ten plik na stronę test.com

$ cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

Następnie otwieramy plik w edytorze:

$ nano /var/www/test.com/public_html/index.html

Zmieniamy plik tak, aby test.com zawierał odniesienia do example.com:

/var/www/test.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body> <h1>Success! The test.com virtual host is working!</h1>
  </body>
</html>

Zapisujemy i zamykamy ten plik. 

Teraz mamy strony niezbędne do przetestowania konfiguracji wirtualnego hosta. 

Krok 3 – Tworzenie nowych plików wirtualnego hosta.

Pliki wirtualnych hostów określają rzeczywistą konfigurację naszych wirtualnych hostów i sposób w jaki serwer Apache odpowiada na różne żądania domen.

Apache jest dostarczany z domyślnym plikiem hosta 000-default.conf, który można używać jako początkowy. Skopiuj ten plik do pierwszej domeny:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

Uwaga : domyślna konfiguracja Apache w Debianie 8 wymaga, aby każdy plik wirtualnego hosta kończył się rozszerzeniem .conf.

Otwieramy nowy plik w edytorze:

$ sudo nano /etc/apache2/sites-available/example.com.conf

Plik będzie wyglądał tak, jak w przykładzie poniżej, z dodatkowymi komentarzami:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Ten wirtualny host pasuje do wszystkich żądań, które są tworzone w porcie 80 – domyślnym porcie HTTP. Zróbmy kilka zmian w tej konfiguracji i dodajmy kilka nowych dyrektyw.

Najpierw zmieniamy dyrektywę ServerAdmin na e-mail, przez który administrator witryny może odbierać wiadomości.

/etc/apache2/sites-available/example.com.conf
ServerAdmin admin@example.com

Następnie musimy dodać dwie nowe dyrektywy. Pierwsza –  ServerName, ustanawia nazwę domeny dla tego hosta. Druga – ServerAlias, definiuje dalsze nazwy domen, które powinny odpowiadać, tak jakby były to domeny bazowe.

Dodajemy te dwie dyrektywy do pliku konfiguracyjnego bezpośrednio po linii ServerAdmin:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
...

Następnie zmieniamy lokalizację głównego dokumentu dla tej domeny, zmieniając dyrektywę DocumentRoot, wskazując katalog utworzony dla tego hosta:

DocumentRoot /var/www/example.com/public_html

Po wprowadzeniu tych zmian plik powinien wyglądać tak:

/etc/apache2/sites-available/example.com.conf
<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>

Plik zapisujemy i zamykamy.

Tworzymy drugi plik konfiguracyjny, tworząc kopię tego pliku:

$ sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

I otwieramy w edytorze:

$ sudo nano /etc/apache2/sites-available/test.com.conf

Następnie zmieniamy odpowiednie ustawienia, aby odnieść się do drugiej domeny. Po zakończeniu plik będzie wyglądać tak:

/etc/apache2/sites-available/test.com.conf
<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>

Zapisujemy i zamykamy.

Teraz, gdy stworzyliśmy pliki wirtualnego hosta, możemy je włączyć.

Krok 4 - Włączanie nowych plików wirtualnego hosta

Utworzyliśmy foldery i pliki konfiguracyjne hosta wirtualnego, ale Apache nie używa ich do momentu ich aktywacji. Za pomocą narzędzia a2ensite można włączyć każdą z witryn.

Włączamy pierwszą witrynę:

$ sudo a2ensite example.com.conf

zostanie wyświetlony następujący Output, jeśli w pliku nie wystąpiły błędy składniowe lub literowe:

Output
Enabling site example.com.
To activate the new configuration, you need to run:
  service apache2 reload

Aby zmiany zaczęły obowiązywać, musimy załadować Apache. Zanim to zrobimy, włączamy inne witryny:

$ sudo a2ensite test.com.conf

Zobaczymy wiadomość wskazującą, że strona jest włączona:

Output
Enabling site test.com.
To activate the new configuration, you need to run:
  service apache2 reload

Następnie wyłączamy domyślną stronę zdefiniowaną w 000-default.conf za pomocą  polecenia a2dissite:

$ sudo a2dissite 000-default.conf

Ponownie uruchamiamy Apache:

$ sudo systemctl restart apache2

Witryny są teraz skonfigurowane. Przetestujmy je. 

Krok 5 – Konfigurowanie plików lokalnych hostów (opcjonalnie)

Jeśli używaliśmy przykładowych domen, możemy przynajmniej przetestować funkcjonalność tego procesu, tymczasowo modyfikując plik hosts na lokalnym komputerze.

Spowoduje to przechwycenie wszelkich żądań skonfigurowanych domen i wskazanie ich na serwerze VPS, podobnie jak system DNS mógłby to zrobić, jeśli używaliśmy zarejestrowanych domen. 

To działa tylko na lokalnym urządzeniu i jest użyteczne wyłącznie w celach testowych.

Upewniamy się, że wykonujemy te czynności na komputerze lokalnym, a nie na serwerze VPS. Musimy także znać hasło administratora lub być członkiem grupy administracyjnej.

Na komputerze Mac lub Linux, edytujemy lokalny plik z uprawnieniami administratora, wpisując:

$ sudo nano /etc/hosts

Jeśli korzystamy z systemu Windows, otwieramy wiersz polecenia z uprawnieniami administratora i wpisujemy:

C:\> notepad %windir%\system32\drivers\etc\hosts

Po otwarciu pliku dodajemy wiersz, który mapuje publiczny adres IP serwera na każdą nazwę domeny, zgodnie z poniższym przykładem:

/etc /hosts
127.0.0.1   localhost
...
111.111.111.111 example.com
111.111.111.111 test.com

Spowoduje to skierowanie jakichkolwiek żądań example.com i test.com na lokalnym komputerze i ich wysłanie na serwer w 111.111.111.111.

Zapisujemy i zamykamy plik. 

Teraz możemy przetestować ustawienia. Kiedy mamy pewność, że rzeczy działają, usuwamy te dwie linijki z pliku.

Krok 6 – testowanie wyników

Teraz, gdy mamy skonfigurowane wirtualne hosty, możemy łatwo przetestować konfigurację, przechodząc do domen skonfigurowanych w przeglądarce internetowej. Odwiedzamy pierwszą witrynę http://example.com. Naszym celem jest zobaczyć stronę, która wygląda następująco:

Success! The example.com virtual host is working!

Podobnie, jeśli możesz odwiedzić drugiego hosta http://test.com, aby zobaczyć:

Success! The test.com virtual host is working!

Jeśli obie te witryny działają, pomyślnie, skonfigurowaliśmy dwa wirtualne hosty na tym samym serwerze.

Podsumowanie.

Od teraz mamy pojedynczy serwer obsługujący dwie oddzielne nazwy domen. Można rozszerzyć go dalej, wykonując powyższe czynności, aby utworzyć dodatkowe wirtualne hosty.
Nie ma ograniczeń programowych dotyczących ilości nazw domen, które Apache może obsłużyć, więc możemy swobodnie tworzyć dowolną liczbę serwerów.