Спестете 15% от всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код: Skills За начало
Заглавия
Linux Администрация

Как да конфигурирате виртуални хостове в Nginx на Ubuntu

Конфигурирането на виртуални хостове в Nginx е една от най-мощните техники за хостване на множество уебсайтове на един сървър, всеки със собствено име на домейн, коренна директория и независима конфигурация. Nginx управлява това чрез server blocks — гъвкави, лекотежни конфигурационни единици, които определят как уебсървърът отговаря на заявки за всеки домейн.

Независимо дали управлявате личен портфолио, стартирате уебсайтове на клиенти или мащабирате многостепенно приложение, това ръководство предоставя пълен, готов за производство преглед на настройката на Nginx виртуални хостове на Ubuntu. Ще покрием структурата на директориите, конфигурацията на server block, активирането на сайтове, настройката на SSL/HTTPS и отстраняването на неизправности — всичко, което ви трябва, за да преминете от нула към напълно функционален многосайтов Nginx сървър.

> Търсите надежден Ubuntu сървър, за да следвате? AlexHost VPS Hosting планове ви дават пълен root достъп, SSD хранилище и незабавно разгръщане — идеално за този точен случай на употреба.

Предварителни условия

Преди да започнете, уверете се, че са изпълнени следните условия:

Nginx инсталиран на вашия сервър

Ако Nginx все още не е инсталиран, изпълнете следните команди на вашия Ubuntu сервър:

sudo apt update
sudo apt install nginx

Проверете инсталацията и убедете се, че услугата работи:

sudo systemctl status nginx

Трябва да видите active (running) в резултата. Ако не, стартирайте го ръчно:

sudo systemctl start nginx
sudo systemctl enable nginx

Имена на домени, насочени към вашия сервър

Всеки виртуален хост изисква име на домен, което се разрешава на публичния IP адрес на вашия сервър. Ще трябва да създадете A записи в настройките на вашия DNS, насочени към IP адреса на сервъра.

> Нужен ви домен? Регистрирайте своя чрез AlexHost Domain Registration и управлявайте DNS записи директно от вашия контролен панел.

За целите на локалното тестване можете да заобиколите DNS напълно, като редактирате вашия /etc/hosts файл (обхванат в Стъпка 7).

Необходими разрешения

Ще ви трябват sudo привилегии на вашия Ubuntu сервър, за да създавате директории, редактирате конфигурационни файлове и управлявате услугата Nginx.

Стъпка 1: Настройка на директории за всеки уебсайт

Всеки уебсайт, хостван на вашия сървър, трябва да има своя собствена изолирана директория за съхранение на уебфайлове. Това разделение поддържа вашите проекти организирани и предотвратява конфликти в конфигурацията.

В това ръководство ще конфигурираме два примерни домена: example1.com и example2.com. Заменете тези със своите действителни имена на домени навсякъде.

Създаване на директориите на уебния корен

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html

Флагът -p създава всички междинни директории, както е необходимо.

Присвояване на правилното собственост

Предоставете собственост на тези директории на www-data, системния потребител, който 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

Това гарантира, че Nginx има необходимите разрешения за четене, за да обслужва файлове от тези директории.

Задаване на разрешенията на директориите

sudo chmod -R 755 /var/www

Разрешението 755 означава, че собственикът има пълен достъп за четене/писане/изпълнение, докато групите и други потребители имат достъп за четене и изпълнение — подходящо за публично обслужван уебсъдържание.

Стъпка 2: Създайте примерно HTML съдържание

За да проверите, че всеки виртуален хост работи правилно, създайте един прост index.html файл за всеки сайт.

За example1.com

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

За example2.com

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

Тези заместващи страници ще потвърдят, че Nginx маршрутизира заявките към правилния document root за всеки домейн.

Стъпка 3: Създаване на файлове с конфигурация на виртуален хост

Nginx съхранява файлове с конфигурация на сайта в /etc/nginx/sites-available/. Всеки файл определя server block — еквивалентът на Nginx на Apache виртуален хост. Активираните сайтове се свързват символично в /etc/nginx/sites-enabled/.

Конфигурация за example1.com

Създайте нов файл с конфигурация:

sudo nano /etc/nginx/sites-available/example1.com

Добавете следния server block:

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

Запазете и затворете файла (Ctrl+X, след това Y, след това Enter).

Конфигурация за example2.com

Създайте втори файл с конфигурация:

sudo nano /etc/nginx/sites-available/example2.com

Добавете следния server block:

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

Обяснени ключови директиви

ДирективаЦел
listen 80Слуша входящи HTTP връзки на порт 80
listen [::]:80Активира поддръжка на IPv6 на порт 80
server_nameОпределя кои доменни имена обработва този блок
rootЗадава корена на документите — където се съхраняват файловете на уебсайта
indexУказва файла по подразбиране, който трябва да бъде предоставен при поискване на директория
try_filesОпитва се да предостави поисканият файл; връща 404, ако не е намерен
access_log / error_logОтделни файлове на дневник на сайт за по-лесно отстраняване на грешки

Стъпка 4: Активиране на виртуалните хостове

Nginx активира сайтовете, като създава символни връзки от sites-available към sites-enabled. Този дизайн ви позволява да подготвите конфигурации без да ги активирате веднага.

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/

Премахване на сайта по подразбиране (Опционално, но препоръчано)

Ако искате да предотвратите намесата на страницата на Nginx по подразбиране, деактивирайте я:

sudo rm /etc/nginx/sites-enabled/default

Винаги можете да я активирате отново, като пресъздадете символната връзка.

Стъпка 5: Тестване на конфигурацията на Nginx

Преди да рестартирате Nginx, винаги валидирайте вашите конфигурационни файлове за синтаксни грешки. Неправилно конфигуриран файл може да спре всички сайтове на сървъра.

sudo nginx -t

Успешният тест връща:

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

Ако видите грешки, Nginx ще посочи файла и номера на реда, където възникна проблемът. Прегледайте съответния конфигурационен файл и коригирайте всички печатни грешки или липсващи точки и запетаи, преди да продължите.

Стъпка 6: Рестартирайте Nginx, за да приложите промените

След като тестът на конфигурацията е успешен, презаредете или рестартирайте Nginx, за да приложите вашите промени:

sudo systemctl restart nginx

Като алтернатива, използвайте reload за грациозен рестарт, който не прекъсва активните връзки:

sudo systemctl reload nginx

Стъпка 7: Достъп до вашите уебсайтове

Ако DNS вече е конфигуриран

Ако вашите доменни имена вече сочат към IP адреса на вашия сервър чрез DNS A записи, просто отворете браузър и навигирайте до:

  • http://example1.com
  • http://example2.com

Трябва да видите съответните “Добре дошли” съобщения, които създадохте в Стъпка 2.

За локално тестване (без DNS)

Ако тествате локално или DNS все още не се е разпространил, можете да симулирате разрешаване на домена чрез редактиране на файла /etc/hosts на вашата локална машина (на Linux/macOS) или C:WindowsSystem32driversetchosts (на Windows).

Отворете файла с повишени привилегии:

sudo nano /etc/hosts

Добавете следните редове, заменяйки YOUR_SERVER_IP с действителния IP адрес на вашия сервър:

YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.com

Запазете файла и тествайте в браузъра си. Помнете да премахнете тези записи, когато вашите реални DNS записи са активни.

Стъпка 8: Активиране на HTTPS с Let’s Encrypt (Препоръчано)

Работата на уебсайтове над обикновен HTTP вече не е приемлива за производствени среди. HTTPS криптира трафика между вашия сървър и посетителите, подобрява SEO класирането и е необходимо за съвременни функции на браузъра. Let’s Encrypt предоставя безплатни, автоматично подновяеми SSL/TLS сертификати.

> Предпочитате премиум SSL решение? AlexHost предлага надеждни SSL сертификати за бизнеси, които имат нужда от разширена валидация или wildcard покритие.

Инсталиране на Certbot

sudo apt install certbot python3-certbot-nginx

Получаване и инсталиране на SSL сертификати

Стартирайте Certbot за всеки домейн. Плъгинът --nginx автоматично модифицира вашата Nginx конфигурация, за да активира HTTPS:

sudo certbot --nginx -d example1.com -d www.example1.com
sudo certbot --nginx -d example2.com -d www.example2.com

Следвайте интерактивните подсказки. Certbot ще:

  1. Проверява собственост на домейна чрез HTTP предизвикателство
  2. Получава подписан сертификат от Let’s Encrypt
  3. Автоматично актуализира вашия Nginx блок на сървъра, за да слуша на порт 443
  4. Конфигурира пренасочване от HTTP към HTTPS

Проверка на автоматичното подновяване

Сертификатите на Let’s Encrypt изтичат всеки 90 дни. Certbot инсталира systemd таймер, за да обработва подновяванията автоматично. Тестирайте го с:

sudo certbot renew --dry-run

Ако пробното стартиране завърши без грешки, вашите сертификати ще се подновят автоматично без никакво ръчно вмешателство.

Как ще изглежда вашия актуализиран блок на сървъра

След като Certbot работи, вашата конфигурация ще бъде автоматично актуализирана на нещо подобно на това:

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

Отстраняване на често срещани проблеми

Дори при внимателна конфигурация могат да възникнат проблеми. Ето най-честите проблеми и как да ги разрешите:

502 Bad Gateway

Това обикновено означава, че Nginx не може да комуникира със服务 (например PHP-FPM или Node.js приложение). Проверете дали услугата е работеща и че socket/портът във вашата конфигурация е правилен.

403 Forbidden

Обикновено е проблем с разрешенията. Проверете дали www-data притежава уеб корена и че разрешенията на файловете са зададени правилно:

sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com

404 Not Found

Проверете дали директивата root в блока на вашия сървър сочи към правилната директория и че index.html съществува на този път.

Грешен сайт се зарежда

Ако посещението на example1.com зарежда съдържанието на example2.com, проверете дали:

  • Всяка директива server_name е уникална и правилна
  • Символните връзки в sites-enabled са валидни: ls -la /etc/nginx/sites-enabled/
  • Сайтът по подразбиране е деактивиран, ако има конфликт

Nginx не се стартира след промяна на конфигурацията

Винаги изпълнете sudo nginx -t преди рестартиране. Прегледайте внимателно изходът на грешката — той ще сочи към точния файл и ред, причиняващи проблема.

Проверка на логовете

Логовете за всеки сайт (конфигурирани в Стъпка 3) са вашия най-добър ресурс за отстраняване на грешки:

sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.log

Разширени съображения

Хостване на PHP приложения

Ако вашите сайтове работят с PHP (например WordPress, Laravel), ще трябва да инсталирате PHP-FPM и да добавите fastcgi_pass директива към вашия блок сервър:

location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Използване на контролен панел

Управлението на Nginx виртуални хостове ръчно чрез командния ред е мощно, но отнема време в голям мащаб. Ако предпочитате графичен интерфейс, разгледайте VPS с cPanel на AlexHost или изследвайте пълния диапазон на VPS контролни панели, за да намерите подходящия за вашия работен процес.

Разширяване отвъд един VPS

Когато трафикът ви нарастне, един VPS може да не е достатъчен. За работни натоварвания с висок трафик и интензивна употреба на ресурси, разгледайте надграждането до Dedicated Servers за гарантирани ресурси, пълна изолация на хардуера и максимална производителност.

Заключение

Вие успешно конфигурирахте Nginx виртуални хостове на Ubuntu, което позволява на вашия сървър да хостира множество независими уебсайтове едновременно. Ето резюме на това, което беше постигнато:

  • Създадохте изолирани директории на уеб корена за всеки домейн с правилна собственост и разрешения
  • Написахте чисти, готови за производство конфигурации на блокове сървър с отделни логове за достъп и грешки
  • Активирахте виртуални хостове използвайки sites-available / sites-enabled модел на базата на символни връзки на Nginx
  • Валидирахте и презаредихте конфигурацията на Nginx безопасно
  • Защитихте всеки сайт с HTTPS използвайки безплатни сертификати Let's Encrypt чрез Certbot

Тази конфигурация е ефективна, мащабируема и следва най-добрите практики на Nginx. Независимо дали хостирате два сайта или двадесет, същият модел се прилага — просто повторете процеса за всеки допълнителен домейн.

За най-добрите резултати комбинирайте тази конфигурация с бързо и надежно хостинг окръжение. AlexHost's VPS Hosting планове са оптимизирани за Linux работни натоварвания, идват с пълен root достъп и се поддържат от 24/7 техническа поддръжка — давайки ви идеалната основа за пускане на Nginx в производство.