15%

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
31.10.2024

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

  1. Wymagania wstępne
  2. Skonfiguruj katalogi dla każdej strony internetowej
  3. Utwórz przykładową zawartość HTML
  4. Utwórz pliki konfiguracji wirtualnego hosta
  5. Włącz wirtualne hosty
  6. Przetestuj konfigurację Nginx
  7. Uruchom ponownie Nginx, aby zastosować zmiany
  8. Uzyskaj dostęp do swoich stron internetowych
  9. Włącz HTTPS za pomocą Let’s Encrypt (zalecane)
  10. Rozwiązywanie typowych problemów
  11. 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 nginx

Sprawdź instalację i upewnij się, że usługa jest uruchomiona:

sudo systemctl status nginx

Powinieneś zobaczyć active (running) w danych wyjściowych. Jeśli nie, uruchom go 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 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/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 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.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 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.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 konfiguracyjny:

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;
    }
}

Wyjaś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 dokumentów — 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 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/default

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

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

sudo systemctl reload nginx

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

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

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

Uzyskaj 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.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 poprzez wyzwanie HTTP
  2. Uzyskać podpisany certyfikat od Let’s Encrypt
  3. Automatycznie zaktualizować blok serwera Nginx, aby nasłuchiwał na porcie 443
  4. 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-run

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

404 Not Found

Sprawdź, czy dyrektywa root w twoim bloku serwera wskazuje na prawidłowy katalog i czy index.html istnieje w tej ścieżce.

Ładuje się zła

15%

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