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.ServerNameiServerAlias: 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.logDla 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