Як налаштувати віртуальні хости в Nginx на Ubuntu
Налаштування віртуальних хостів у Nginx — це один з найпотужніших методів розміщення кількох веб-сайтів на одному сервері, кожен з власним доменним іменем, кореневою директорією та незалежною конфігурацією. Nginx обробляє це через блоки сервера — гнучкі, легкі одиниці конфігурації, які визначають, як веб-сервер реагує на запити для кожного домену.
Незалежно від того, чи ви керуєте особистим портфоліо, запускаєте веб-сайти клієнтів або масштабуєте багатотенантну програму, цей посібник надає повний, готовий до виробництва, детальний опис налаштування віртуальних хостів Nginx на Ubuntu. Ми розглянемо структуру директорій, конфігурацію блоків сервера, включення сайтів, налаштування SSL/HTTPS та усунення несправностей — все, що вам потрібно, щоб перейти від нуля до повністю функціонального багатосайтового сервера Nginx.
> Шукаєте надійний сервер Ubuntu для виконання цих кроків? Плани VPS Hosting AlexHost надають вам повний доступ 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/. Кожен файл визначає блок сервера — еквівалент віртуального хоста Apache у Nginx. Включені сайти потім символічно пов’язуються з /etc/nginx/sites-enabled/.
Конфігурація для example1.com
Створіть новий файл конфігурації:
sudo nano /etc/nginx/sites-available/example1.comДодайте такий блок сервера:
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 {
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-адресу вашого сервера через A записи DNS, просто відкрийте браузер і перейдіть на:
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
- Автоматично оновлювати ваш блок сервера 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;
}Усунення поширених проблем
Нав
