Jak skonfigurować Virtual Hosts w Nginx na Ubuntu
Konfigurowanie wirtualnych hostów w Nginx jest jedną z najpotężniejszych technik hostowania wielu stron internetowych na jednym serwerze, każda z własną nazwą domeny, katalogiem głównym i niezależną konfiguracją. Nginx obsługuje to poprzez bloki serwera — elastyczne, lekkie jednostki konfiguracyjne, które definiują, jak serwer internetowy odpowiada na żądania dla każdej domeny.
Niezależnie od tego, czy zarządzasz osobistym portfolio, prowadzisz strony klientów, czy skalujesz aplikację wielodostępną, ten przewodnik zawiera kompletny, gotowy do produkcji opis konfiguracji wirtualnych hostów Nginx na Ubuntu. Omówimy strukturę katalogów, konfigurację bloków serwera, włączanie stron, konfigurację SSL/HTTPS i rozwiązywanie problemów — wszystko, czego potrzebujesz, aby przejść od zera do w pełni funkcjonalnego serwera Nginx obsługującego wiele stron.
> Szukasz niezawodnego serwera Ubuntu, aby śledzić postępy? Plany VPS Hosting AlexHost dają ci pełny dostęp root, magazyn SSD i natychmiastowe wdrożenie — idealne dla tego dokładnie przypadku użycia.
Spis treści
- Wymagania wstępne
- Skonfiguruj katalogi dla każdej strony internetowej
- Utwórz przykładową zawartość HTML
- Utwórz pliki konfiguracji wirtualnego hosta
- Włącz wirtualne hosty
- Przetestuj konfigurację Nginx
- Uruchom ponownie Nginx, aby zastosować zmiany
- Uzyskaj dostęp do swoich stron internetowych
- Włącz HTTPS za pomocą Let’s Encrypt (zalecane)
- Rozwiązywanie typowych problemów
- Podsumowanie
Wymagania wstępne
Przed rozpoczęciem upewnij się, że spełnione są następujące warunki:
Nginx zainstalowany na twoim serwerze
Jeśli Nginx nie jest jeszcze zainstalowany, uruchom następujące polecenia na serwerze Ubuntu:
sudo apt update
sudo apt install nginxSprawdź instalację i upewnij się, że usługa jest uruchomiona:
sudo systemctl status nginxPowinieneś zobaczyć active (running) w danych wyjściowych. Jeśli nie, uruchom go ręcznie:
sudo systemctl start nginx
sudo systemctl enable nginxNazwy domen wskazujące na twój serwer
Każdy wirtualny host wymaga nazwy domeny, która rozwiązuje się na publiczny adres IP twojego serwera. Musisz utworzyć rekordy A w ustawieniach DNS wskazujące na adres IP serwera.
> Potrzebujesz domeny? Zarejestruj swoją poprzez Rejestrację domeny AlexHost i zarządzaj rekordami DNS bezpośrednio z panelu sterowania.
Do celów testowania lokalnego możesz całkowicie pominąć DNS, edytując plik /etc/hosts (omówiony w kroku 7).
Wymagane uprawnienia
Będziesz potrzebować uprawnień sudo na serwerze Ubuntu, aby tworzyć katalogi, edytować pliki konfiguracyjne i zarządzać usługą Nginx.
Krok 1: Skonfiguruj katalogi dla każdej strony internetowej
Każda strona internetowa hostowana na twoim serwerze powinna mieć własny izolowany katalog do przechowywania plików internetowych. Ta separacja utrzymuje twoje projekty zorganizowane i zapobiega konfliktom konfiguracyjnym.
W tym przewodniku skonfigurujemy dwie przykładowe domeny: example1.com i example2.com. Zastąp je swoimi rzeczywistymi nazwami domen w całym tekście.
Utwórz katalogi główne sieci Web
sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/htmlFlaga -p tworzy wszystkie pośrednie katalogi w razie potrzeby.
Przypisz prawidłową własność
Przyznaj własność tych katalogów użytkownikowi systemowemu www-data, który uruchamia Nginx:
sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/htmlZapewnia to, że Nginx ma niezbędne uprawnienia do odczytu, aby serwować pliki z tych katalogów.
Ustaw uprawnienia katalogów
sudo chmod -R 755 /var/wwwUprawnienie 755 oznacza, że właściciel ma pełny dostęp do odczytu/zapisu/wykonania, podczas gdy grupy i inni użytkownicy mają dostęp do odczytu i wykonania — odpowiedni dla publicznie serwowanej zawartości internetowej.
Krok 2: Utwórz przykładową zawartość HTML
Aby sprawdzić, czy każdy wirtualny host działa prawidłowo, utwórz prosty plik index.html dla każdej witryny.
Dla example1.com
echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.htmlDla example2.com
echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.htmlTe strony zastępcze potwierdzą, że Nginx kieruje żądania do prawidłowego katalogu dokumentów dla każdej domeny.
Krok 3: Utwórz pliki konfiguracji wirtualnego hosta
Nginx przechowuje pliki konfiguracji witryny w /etc/nginx/sites-available/. Każdy plik definiuje blok serwera — odpowiednik wirtualnego hosta Apache w Nginx. Włączone witryny są następnie dowiązane symbolami do /etc/nginx/sites-enabled/.
Konfiguracja dla example1.com
Utwórz nowy plik konfiguracyjny:
sudo nano /etc/nginx/sites-available/example1.comDodaj następujący blok serwera:
server {
listen 80;
listen [::]:80;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html index.htm;
access_log /var/log/nginx/example1.com.access.log;
error_log /var/log/nginx/example1.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Zapisz i zamknij plik (Ctrl+X, następnie Y, następnie Enter).
Konfiguracja dla example2.com
Utwórz drugi plik konfiguracyjny:
sudo nano /etc/nginx/sites-available/example2.comDodaj następujący blok serwera:
server {
listen 80;
listen [::]:80;
server_name example2.com www.example2.com;
root /var/www/example2.com/html;
index index.html index.htm;
access_log /var/log/nginx/example2.com.access.log;
error_log /var/log/nginx/example2.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Wyjaśnienie kluczowych dyrektyw
| Dyrektywa | Cel |
|---|---|
listen 80 | Nasłuchuje przychodzących połączeń HTTP na porcie 80 |
listen [::]:80 | Włącza obsługę IPv6 na porcie 80 |
server_name | Definiuje, które nazwy domen obsługuje ten blok |
root | Ustawia katalog główny dokumentów — gdzie przechowywane są pliki witryny |
index | Określa domyślny plik do serwowania, gdy żądany jest katalog |
try_files | Próbuje serwować żądany plik; zwraca 404, jeśli nie znaleziono |
access_log / error_log | Oddzielne pliki dziennika na witrynę dla łatwiejszego debugowania |
Krok 4: Włącz wirtualne hosty
Nginx aktywuje witryny, tworząc dowiązania symboliczne z sites-available do sites-enabled. Ten projekt pozwala przygotować konfiguracje bez ich natychmiastowego aktywowania.
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/Usuń witrynę domyślną (opcjonalnie, ale zalecane)
Jeśli chcesz zapobiec ingerencji domyślnej strony zastępczej Nginx, wyłącz ją:
sudo rm /etc/nginx/sites-enabled/defaultZawsze możesz ją ponownie włączyć, tworząc ponownie dowiązanie symboliczne.
Krok 5: Przetestuj konfigurację Nginx
Przed uruchomieniem ponownym Nginx zawsze sprawdzaj poprawność składni plików konfiguracyjnych. Błędnie skonfigurowany plik może wyłączyć wszystkie witryny na serwerze.
sudo nginx -tPomyślny test zwraca:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulJeśli widzisz błędy, Nginx wskaże plik i numer wiersza, w którym występuje problem. Przejrzyj odpowiedni plik konfiguracyjny i popraw wszelkie literówki lub brakujące średniki przed kontynuowaniem.
Krok 6: Uruchom ponownie Nginx, aby zastosować zmiany
Po pomyślnym przejściu testu konfiguracji przeładuj lub uruchom ponownie Nginx, aby zastosować zmiany:
sudo systemctl restart nginxAlternatywnie użyj reload do wdzięcznego ponownego uruchomienia, które nie przerywa aktywnych połączeń:
sudo systemctl reload nginxKrok 7: Uzyskaj dostęp do swoich stron internetowych
Jeśli DNS jest już skonfigurowany
Jeśli twoje nazwy domen już wskazują na adres IP twojego serwera poprzez rekordy DNS A, po prostu otwórz przeglądarkę i przejdź do:
http://example1.comhttp://example2.com
Powinieneś zobaczyć odpowiednie komunikaty „Witaj” utworzone w kroku 2.
Do testowania lokalnego (bez DNS)
Jeśli testujesz lokalnie lub DNS nie został jeszcze rozpropagowany, możesz symulować rozwiązywanie domeny, edytując plik /etc/hosts na lokalnym komputerze (na Linux/macOS) lub C:WindowsSystem32driversetchosts (na Windows).
Otwórz plik z podwyższonymi uprawnieniami:
sudo nano /etc/hostsDodaj następujące linie, zastępując YOUR_SERVER_IP rzeczywistym adresem IP serwera:
YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.comZapisz plik i przetestuj w przeglądarce. Pamiętaj, aby usunąć te wpisy po uruchomieniu rzeczywistych rekordów DNS.
Krok 8: Włącz HTTPS za pomocą Let’s Encrypt (zalecane)
Uruchamianie stron internetowych przez zwykły HTTP nie jest już akceptowalne dla środowisk produkcyjnych. HTTPS szyfruje ruch między twoim serwerem a odwiedzającymi, poprawia ranking SEO i jest wymagane dla nowoczesnych funkcji przeglądarki. Let’s Encrypt zapewnia bezpłatne, automatycznie odnawialne certyfikaty SSL/TLS.
> Wolisz rozwiązanie premium SSL? AlexHost oferuje zaufane Certyfikaty SSL dla firm, które potrzebują rozszerzonej weryfikacji lub pokrycia wildcard.
Zainstaluj Certbot
sudo apt install certbot python3-certbot-nginxUzyskaj i zainstaluj certyfikaty SSL
Uruchom Certbot dla każdej domeny. Wtyczka --nginx automatycznie modyfikuje twoją konfigurację Nginx, aby włączyć HTTPS:
sudo certbot --nginx -d example1.com -d www.example1.comsudo certbot --nginx -d example2.com -d www.example2.comPostępuj zgodnie z interaktywnymi monitami. Certbot będzie:
- Weryfikować własność domeny poprzez wyzwanie HTTP
- Uzyskać podpisany certyfikat od Let’s Encrypt
- Automatycznie zaktualizować blok serwera Nginx, aby nasłuchiwał na porcie 443
- Skonfigurować przekierowanie HTTP na HTTPS
Sprawdź automatyczne odnawianie
Certyfikaty Let’s Encrypt wygasają co 90 dni. Certbot instaluje timer systemd do automatycznego obsługiwania odnowień. Przetestuj go za pomocą:
sudo certbot renew --dry-runJeśli próba sucha zakończy się bez błędów, twoje certyfikaty będą odnawiać się automatycznie bez żadnej ręcznej interwencji.
Jak będzie wyglądać twój zaktualizowany blok serwera
Po uruchomieniu Certbot twoja konfiguracja zostanie automatycznie zaktualizowana do czegoś takiego:
server {
listen 443 ssl;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html;
ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example1.com www.example1.com;
return 301 https://$host$request_uri;
}Rozwiązywanie typowych problemów
Nawet przy ostrożnej konfiguracji mogą pojawić się problemy. Oto najczęstsze problemy i sposoby ich rozwiązania:
502 Bad Gateway
Zwykle oznacza to, że Nginx nie może komunikować się z usługą zaplecza (np. PHP-FPM lub aplikacją Node.js). Sprawdź, czy usługa zaplecza jest uruchomiona i czy gniazdo/port w twojej konfiguracji jest prawidłowy.
403 Forbidden
Zwykle problem z uprawnieniami. Sprawdź, czy www-data jest właścicielem katalogu głównego sieci Web i czy uprawnienia do plików są ustawione prawidłowo:
sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com404 Not Found
Sprawdź, czy dyrektywa root w twoim bloku serwera wskazuje na prawidłowy katalog i czy index.html istnieje w tej ścieżce.
