Konfiguracja wirtualnych hostów
1. Co to są hosty wirtualne?
Wyobraź sobie, że otwierasz przytulną kawiarnię. Większość klientów zamawia kawę ☕, ale czasami ktoś chce herbatę 🍵. Zamiast otwierać osobny lokal dla miłośników herbaty, po prostu wydzielasz mały kącik dla fanów herbaty. W świecie serwerów internetowych ta koncepcja nazywa się hostami wirtualnymi. Pozwalają one twojemu serwerowi obsługiwać kilka stron internetowych (z różnymi domenami), mając tylko jeden fizyczny serwer.
Typy hostów wirtualnych
- Na podstawie adresów IP — każda strona otrzymuje swój unikalny adres IP. To jak strefa VIP na koncercie: każdy klient z VIP-biletem ma swoje miejsce.
- Na podstawie nazw domen — kilka stron może dzielić jeden adres IP. W tym przypadku serwer używa nazwy hosta (nazwa domeny) z zapytania klienta, aby zrozumieć, którą stronę pokazać. To bardziej popularna i wygodna opcja dla większości projektów.
2. Konfiguracja hosta wirtualnego w Nginx
1. Tworzenie nowego hosta wirtualnego
Aby skonfigurować host wirtualny, najpierw trzeba utworzyć plik konfiguracyjny. Ten plik będzie zawierał informacje o tym, jak serwer powinien obsługiwać żądania dla konkretnej domeny.
Tworzymy plik dla naszej strony, na przykład example.com
:
sudo nano /etc/nginx/sites-available/example.com
Dodajemy następujący blok konfiguracyjny:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Rozkładamy kod na części:
listen 80;
: Wskazuje, że serwer będzie nasłuchiwał na porcie 80 (domyślnie używany dla HTTP).server_name example.com www.example.com;
: Określa, na jakie nazwy domen serwer powinien reagować.root /var/www/example.com;
: Dyrektywa wskazuje folder główny, gdzie znajdują się pliki strony.index index.html;
: Wskazuje plik, który będzie używany jako "strona główna" strony.location / { try_files $uri $uri/ =404; }
: Konfiguracja routingu żądań. Jeśli plik lub katalog nie zostanie znaleziony, zwracany jest błąd 404.
2. Aktywacja konfiguracji
Teraz trzeba "włączyć" nasz host wirtualny. W Nginx robi się to za pomocą linków symbolicznych:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Następnie sprawdzamy, czy nie ma błędów w konfiguracji:
sudo nginx -t
Jeśli wszystko w porządku, restartujemy serwer:
sudo systemctl reload nginx
3. Sprawdzanie działania
Tworzymy folder dla plików strony:
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html
Dodajemy następujący prosty kod HTML:
<h1>Witamy na example.com!</h1>
<p>Twój serwer Nginx jest gotowy do pracy.</p>
Zapisujemy plik, następnie otwieramy w przeglądarce: http://example.com
. Jeśli widzimy wiadomość powitalną, to znaczy, że host wirtualny działa!
4. Linki symboliczne w Linux
Linki symboliczne (lub soft links, symlinks) — to specjalne obiekty plikowe, które wskazują na inny plik lub katalog. Działają jak "skróty" w Windows, pozwalając na dostęp do docelowego pliku lub folderu przez alternatywną ścieżkę.
Linki symboliczne zawierają ścieżkę do oryginalnego obiektu, a nie sam obiekt. Jeśli oryginalny plik lub folder zostaje przeniesiony lub usunięty, link staje się "martwy", ponieważ nie wskazuje już na istniejący obiekt.
Komenda do tworzenia linku symbolicznego:
ln -s target link_name
target
— ścieżka do oryginalnego obiektu.link_name
— nazwa linku.
Przykład:
ln -s /var/log/syslog log_link
Teraz przez log_link
można uzyskać dostęp do pliku /var/log/syslog
.
Zastosowanie:
- Ułatwienie nawigacji.
- Tworzenie alternatywnych punktów dostępu do plików.
- Organizacja katalogów.
3. Konfiguracja wirtualnego hosta w Apache
1. Tworzenie pliku konfiguracyjnego
Apache korzysta z innego podejścia. Tutaj konfiguracje dla wirtualnych hostów znajdują się w folderze /etc/apache2/sites-available/
. Tworzymy plik dla naszej strony:
sudo nano /etc/apache2/sites-available/example.com.conf
Dodajemy następujący kod:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Krótkie wyjaśnienie:
<VirtualHost *:80>
: Określa, że konfiguracja ma zastosowanie do wszystkich żądań na port 80.ServerName
iServerAlias
: Definiują główną i dodatkowe nazwy domeny dla strony.DocumentRoot
: Wskazuje folder główny strony.<Directory>
: Blok, który ustala prawa dostępu i zachowanie dla określonego folderu.
2. Aktywacja konfiguracji
Żeby aktywować konfigurację, używamy polecenia:
sudo a2ensite example.com.conf
Restartujemy serwer, żeby zmiany weszły w życie:
sudo systemctl restart apache2
3. Sprawdzanie działania
Znowu tworzymy folder i plik dla strony:
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html
Dodajemy zawartość:
<h1>Witaj na example.com na Apache!</h1>
Zapisujemy i otwieramy w przeglądarce: http://example.com
. Jeśli widzisz stronę powitalną — gratulacje, skonfigurowałeś wirtualny host w Apache!
4. Sprawdzanie i zarządzanie wieloma hostami
Konfiguracja drugiego wirtualnego hosta
Załóżmy, że chcesz obsługiwać drugą stronę: test.com
. Proces jest ten sam:
- Tworzysz nowy plik konfiguracyjny.
- Podajesz unikalną nazwę domeny i folder główny.
- Aktywujesz konfigurację i restartujesz serwer.
Dla Nginx:
sudo nano /etc/nginx/sites-available/test.com
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx
Dla Apache:
sudo nano /etc/apache2/sites-available/test.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2
Debugowanie problemów
Jeśli twoje wirtualne hosty nie działają, zacznij od sprawdzenia błędów. Na przykład:
Dla Nginx:
sudo tail -f /var/log/nginx/error.log
Dla Apache:
sudo tail -f /var/log/apache2/error.log
Można również użyć komendy curl
, aby bezpośrednio przetestować stronę:
curl -I http://example.com
Teraz możesz skonfigurować wirtualne hosty i uruchomić wiele stron na jednym serwerze. Równocześnie z tym idzie konfiguracja HTTPS, żeby twoje strony były bezpieczne. Ale to już temat na kolejny wykład!
GO TO FULL VERSION