Как да конфигурирате виртуални хостове в 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.comhttp://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.comsudo certbot --nginx -d example2.com -d www.example2.comСледвайте интерактивните подсказки. Certbot ще:
- Проверява собственост на домейна чрез HTTP предизвикателство
- Получава подписан сертификат от Let’s Encrypt
- Автоматично актуализира вашия Nginx блок на сървъра, за да слуша на порт 443
- Конфигурира пренасочване от 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.com404 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 в производство.
от всички хостинг услуги