Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Administracja Linux

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 nginx

Zweryfikuj instalację i sprawdź, czy usługa jest uruchomiona:

sudo systemctl status nginx

Powinieneś zobaczyć active (running) w wynikach. Jeśli nie, uruchom ją ręcznie:

sudo systemctl start nginx
sudo systemctl enable nginx

Nazwy 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/html

Flaga -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/html

Zapewnia 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/www

Uprawnienie 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.html

Dla example2.com

echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.html

Te 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.com

Dodaj 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.com

Dodaj 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

DyrektywaCel
listen 80Nasłuchuje przychodzących połączeń HTTP na porcie 80
listen [::]:80Włącza obsługę IPv6 na porcie 80
server_nameDefiniuje, które nazwy domen obsługuje ten blok
rootUstawia katalog główny dokumentu — gdzie przechowywane są pliki witryny
indexOkreśla domyślny plik do serwowania, gdy żądany jest katalog
try_filesPróbuje serwować żądany plik; zwraca 404, jeśli nie znaleziono
access_log / error_logOddzielne 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/default

Zawsze 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 -t

Pomyślny test zwraca:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Jeś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 nginx

Alternatywnie, użyj reload do bezpiecznego ponownego uruchomienia, które nie przerywa aktywnych połączeń:

sudo systemctl reload nginx

Krok 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.com
  • http://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/hosts

Dodaj 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.com

Zapisz 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-nginx

Uzyskaj 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.com
sudo certbot --nginx -d example2.com -d www.example2.com

Postępuj zgodnie z interaktywnymi monitami. Certbot będzie:

  1. Weryfikować własność domeny za pomocą wyzwania HTTP
  2. Uzyskać podpisany certyfikat z Let’s Encrypt
  3. Automatycznie aktualizować blok serwera Nginx, aby nasłuchiwał na porcie 443
  4. 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-run

Jeś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.com

404 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_name jest unikalna i poprawna
  • Dowiązania symboliczne w sites-enabled są 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.log

Zaawansowane 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.