Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Адміністрація

Як налаштувати віртуальні хости в Nginx на Ubuntu

Налаштування віртуальних хостів в Nginx — одна з найпотужніших методик для розміщення кількох веб-сайтів на одному сервері, кожен з власним доменом, кореневою директорією та незалежною конфігурацією. Nginx обробляє це через блоки сервера — гнучкі, легкі одиниці конфігурації, які визначають, як веб-сервер реагує на запити для кожного домену.

Незалежно від того, керуєте ви особистим портфоліо, запускаєте веб-сайти клієнтів або масштабуєте багатотенантний додаток, цей посібник надає повний, готовий до виробництва, пошаговий процес налаштування віртуальних хостів Nginx на Ubuntu. Ми розглянемо структуру директорій, конфігурацію блоків сервера, активацію сайтів, налаштування SSL/HTTPS та усунення несправностей — все, що вам потрібно, щоб перейти від нуля до повністю функціонального багатосайтового сервера Nginx.

> Шукаєте надійний сервер Ubuntu для практики? Плани VPS Hosting AlexHost надають вам повний 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 та керуйте записами 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-адресу вашого сервера через DNS A записи, просто відкрийте браузер і перейдіть на:

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

Ви повинні побачити відповідні повідомлення "Welcome", які ви створили на кроці 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.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 не може спілкуватися з backend-сервісом (наприклад, PHP-FPM або додатком Node.js). Переконайтеся, що upstream-сервіс запущений і що socket/port у вашій конфігурації правильні.

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 у вашому блоці server вказує на правильний каталог і що 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 може виявитися недостатнім. Для високотрафікових, ресурсомістких робочих навантажень розгляньте оновлення на виділені сервери, щоб отримати гарантовані ресурси, повну ізоляцію обладнання та максимальну продуктивність.

Висновок

Ви успішно налаштували віртуальні хости Nginx на Ubuntu, дозволяючи вашому серверу одночасно розміщувати кілька незалежних веб-сайтів. Ось резюме того, що було досягнуто:

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

Це налаштування є ефективним, масштабованим і відповідає найкращим практикам Nginx. Незалежно від того, розміщуєте ви два сайти чи двадцять, застосовується той самий шаблон — просто повторіть процес для кожного додаткового домену.

Для найкращих результатів поєднайте цю конфігурацію з швидким і надійним середовищем хостингу. Плани VPS Hosting AlexHost оптимізовані для робочих навантажень Linux, мають повний доступ root і підтримуються цілодобовою технічною підтримкою — надаючи вам ідеальну основу для запуску Nginx у виробництві.