Как да конфигурирате виртуални хостове в Nginx на Ubuntu
Конфигурирането на виртуални хостове в Nginx е една от най-мощните техники за хостване на множество уебсайтове на един сървър, всеки със собствено име на домейн, коренна директория и независима конфигурация. Nginx управлява това чрез server blocks — гъвкави, лекотежни конфигурационни единици, които определят как уеб сървърът отговаря на заявките за всеки домейн.
Независимо дали управлявате личен портфолио, стартирате уебсайтове на клиенти или мащабирате многостепенно приложение, това ръководство предоставя пълен, готов за производство преглед на конфигурирането на Nginx виртуални хостове на Ubuntu. Ще покрием структурата на директориите, конфигурацията на server block, активирането на сайтове, настройката на SSL/HTTPS и отстраняването на неизправности — всичко, което ви трябва, за да преминете от нула към напълно функционален многосайтов Nginx сървър.
> Ищете надежден Ubuntu сървър, за да следвате? AlexHost VPS Hosting планове ви дават пълен root достъп, SSD хранилище и моментално разгръщане — идеално за този точен случай на употреба.
Съдържание
- Предварителни условия
- Настройте директориите за всеки уебсайт
- Създайте примерно HTML съдържание
- Създайте конфигурационни файлове на виртуални хостове
- Активирайте виртуалните хостове
- Тестирайте конфигурацията на Nginx
- Рестартирайте Nginx, за да приложите промените
- Достъпете вашите уебсайтове
- Активирайте HTTPS с Let’s Encrypt (препоръчано)
- Отстраняване на често срещани проблеми
- Заключение
Предварителни условия
Преди да започнете, уверете се, че са изпълнени следните условия:
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 регистрация на домейни и управлявайте 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 маршрутизира заявките към правилния документен корен за всеки домейн.
Стъпка 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 сертификати за бизнеси, които имат нужда от разширена валидация или поддръжка на джокер.
Инсталирайте 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
- Автоматично актуализира вашия server block на Nginx, за да слуша на порт 443
- Конфигурира пренасочване от HTTP към HTTPS
Проверете автоматичното подновяване
Сертификатите на Let’s Encrypt изтичат всеки 90 дни. Certbot инсталира systemd таймер, за да управлява подновяванията автоматично. Тестирайте го с:
sudo certbot renew --dry-runАко пробното изпълнение завърши без грешки, вашите сертификати ще се подновят автоматично без никакво ръчно намеса.
Как ще изглежда вашия актуализиран server block
След като 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;
}