Jak skonfigurować Virtual Hosts w Nginx na Ubuntu
Konfigurowanie wirtualnych hostów w Nginx to jedna 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ą sposób, w jaki serwer WWW odpowiada na żądania dla każdej domeny.
Niezależnie od tego, czy zarządzasz osobistym portfolio, prowadzisz strony klientów, czy skalujesz aplikację multi-tenant, 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 witryn, konfigurację SSL/HTTPS i rozwiązywanie problemów — wszystko, czego potrzebujesz, aby przejść od zera do w pełni funkcjonalnego serwera Nginx z wieloma witrynami.
> 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ładnego przypadku użycia.
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 nginxZweryfikuj instalację i sprawdź, czy usługa jest uruchomiona:
sudo systemctl status nginxPowinieneś zobaczyć active (running) w wynikach. Jeśli nie, uruchom ją 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 IP serwera.
> Potrzebujesz domeny? Zarejestruj swoją poprzez Rejestrację Domen AlexHost i zarządzaj rekordami DNS bezpośrednio z panelu sterowania.
Do celów testowania lokalnego możesz pominąć DNS całkowicie, edytując plik /etc/hosts (opisane w Kroku 7).
Wymagane uprawnienia
Potrzebujesz uprawnień sudo na serwerze Ubuntu, aby tworzyć katalogi, edytować pliki konfiguracyjne i zarządzać usługą Nginx.
Krok 1: Konfiguracja katalogów dla każdej witryny
Każda witryna hostowana na serwerze powinna mieć własny izolowany katalog do przechowywania plików internetowych. Ta separacja utrzymuje Twoje projekty zorganizowane i zapobiega konfliktom konfiguracji.
W tym przewodniku skonfigurujemy dwie przykładowe domeny: example1.com i example2.com. Zastąp je swoimi rzeczywistymi nazwami domen w całym przewodniku.
Utwórz katalogi główne witryny
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 index.html plik 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 głównego dla każdej domeny.
Krok 3: Tworzenie plików konfiguracji wirtualnego hosta
Nginx przechowuje pliki konfiguracji witryn 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 konfiguracji:
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 konfiguracji:
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;
}
}Objaś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 dokumentu — 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 Virtual Hosts
Nginx aktywuje witryny, tworząc dowiązania symboliczne z sites-available do sites-enabled. Ten projekt pozwala przygotować konfiguracje bez ich natychmiastowej aktywacji.
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ń domyślną witrynę (opcjonalnie, ale zalecane)
Jeśli chcesz zapobiec ingerowaniu domyślnej strony zastępczej Nginx, wyłącz ją:
sudo rm /etc/nginx/sites-enabled/defaultZawsze możesz ją ponownie włączyć, odtwarzając dowiązanie symboliczne.
Krok 5: Testowanie konfiguracji Nginx
Przed restartowaniem Nginx zawsze sprawdzaj pliki konfiguracyjne pod kątem błędów składni. 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 zobaczysz błędy, Nginx wskaże plik i numer linii, w której wystąpił 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 bezpiecznego ponownego uruchomienia, które nie przerywa aktywnych połączeń:
sudo systemctl reload nginxKrok 7: Dostęp do Twoich Stron Internetowych
Jeśli DNS Jest Już Skonfigurowany
Jeśli Twoje nazwy domen już wskazują na adres IP Twojego serwera za pośrednictwem rekordów DNS A, po prostu otwórz przeglądarkę i przejdź do:
http://example1.comhttp://example2.com
Powinieneś zobaczyć odpowiednie komunikaty "Witaj", które utworzyłeś w Kroku 2.
Do Testowania Lokalnego (Bez DNS)
Jeśli testujesz lokalnie lub DNS nie został jeszcze rozpropagowany, możesz symulować rozwiązywanie nazw domen, edytując plik /etc/hosts na Twojej lokalnej maszynie (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 Twojego 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, gdy Twoje rzeczywiste rekordy DNS będą aktywne.
Krok 8: Włącz HTTPS z Let’s Encrypt (Rekomendowane)
Uruchamianie witryn internetowych przez zwykły HTTP nie jest już akceptowalne dla środowisk produkcyjnych. HTTPS szyfruje ruch między 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 walidacji lub pokrycia wildcard.
Zainstaluj Certbot
sudo apt install certbot python3-certbot-nginxUzyskaj i zainstaluj certyfikaty SSL
Uruchom Certbot dla każdej domeny. Plugin --nginx automatycznie modyfikuje 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 za pomocą wyzwania HTTP
- Uzyskać podpisany certyfikat z Let’s Encrypt
- Automatycznie aktualizować blok serwera Nginx, aby nasłuchiwał na porcie 443
- Konfigurować przekierowanie z HTTP na HTTPS
Weryfikuj automatyczne odnawianie
Certyfikaty Let’s Encrypt wygasają co 90 dni. Certbot instaluje timer systemd do obsługi odnowień automatycznie. Przetestuj go za pomocą:
sudo certbot renew --dry-runJeśli test przebiega bez błędów, twoje certyfikaty będą odnawiać się automatycznie bez żadnej ręcznej interwencji.
Jak będzie wyglądać zaktualizowany blok serwera
Po uruchomieniu Certbot 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 starannej 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ą backend (np. PHP-FPM lub aplikacją Node.js). Sprawdź, czy usługa upstream jest uruchomiona i czy socket/port w Twojej konfiguracji jest poprawny.
403 Forbidden
Zwykle problem z uprawnieniami. Sprawdź, czy www-data jest właścicielem katalogu głównego strony 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 bloku serwera wskazuje na prawidłowy katalog i czy index.html istnieje w tej ścieżce.
Ładuje się zła strona
Jeśli odwiedzenie example1.com ładuje zawartość example2.com, sprawdź, czy:
- Każda dyrektywa
server_namejest unikalna i poprawna - Dowiązania symboliczne w
sites-enabledsą ważne:ls -la /etc/nginx/sites-enabled/ - Domyślna strona jest wyłączona, jeśli powoduje konflikt
Nginx nie uruchamia się po zmianie konfiguracji
Zawsze uruchom sudo nginx -t przed ponownym uruchomieniem. Uważnie przejrzyj dane wyjściowe błędu — wskaże dokładny plik i linię powodującą problem.
Sprawdzanie dzienników
Dzienniki dla poszczególnych stron (skonfigurowane w Kroku 3) są Twoim najlepszym zasobem do debugowania:
sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.logZaawansowane zagadnienia
Hosting aplikacji PHP
Jeśli Twoje witryny działają na PHP (np. WordPress, Laravel), musisz zainstalować PHP-FPM i dodać dyrektywę fastcgi_pass do bloku serwera:
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}Korzystanie z panelu kontrolnego
Ręczne zarządzanie hostami wirtualnymi Nginx za pomocą wiersza poleceń jest potężne, ale czasochłonne na dużą skalę. Jeśli wolisz interfejs graficzny, rozważ VPS z cPanel od AlexHost lub zapoznaj się z pełnym zakresem paneli kontrolnych VPS, aby znaleźć rozwiązanie odpowiednie dla Twojego przepływu pracy.
Skalowanie poza pojedynczym VPS
Wraz ze wzrostem ruchu pojedynczy VPS może być niewystarczający. W przypadku obciążeń o dużym natężeniu ruchu i intensywnym zużyciu zasobów rozważ uaktualnienie do serwerów dedykowanych, aby uzyskać gwarantowane zasoby, pełną izolację sprzętu i maksymalną wydajność.
Podsumowanie
Pomyślnie skonfigurowałeś wirtualne hosty Nginx na Ubuntu, umożliwiając serwerowi jednoczesne hostowanie wielu niezależnych stron internetowych. Oto podsumowanie tego, co zostało osiągnięte:
- Utworzono izolowane katalogi główne sieci Web dla każdej domeny z prawidłowym właścicielem i uprawnieniami
- Napisano czyste, gotowe do produkcji konfiguracje bloków serwera z oddzielnymi dziennikami dostępu i błędów
- Włączono wirtualne hosty przy użyciu wzorca opartego na dowiązaniach symbolicznych Nginx
sites-available/sites-enabled - Zweryfikowano i przeładowano konfigurację Nginx bezpiecznie
- Zabezpieczono każdą witrynę za pomocą HTTPS przy użyciu bezpłatnych certyfikatów Let's Encrypt za pośrednictwem Certbot
Ta konfiguracja jest wydajna, skalowalna i zgodna z najlepszymi praktykami Nginx. Niezależnie od tego, czy hostujesz dwie witryny czy dwadzieścia, obowiązuje ten sam wzorzec — po prostu powtórz proces dla każdej dodatkowej domeny.
Aby uzyskać najlepsze wyniki, połącz tę konfigurację z szybkim i niezawodnym środowiskiem hostingowym. Plany VPS Hosting AlexHost są zoptymalizowane dla obciążeń Linux, zawierają pełny dostęp root i są wspierane przez całodobową pomoc techniczną — zapewniając idealną podstawę do uruchamiania Nginx w produkcji.
na wszystkich usługach hostingowych