15%

Збережіть 15% на всі хостинг-послуги

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

Використовуй код:

Skills
Почати
31.10.2024

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

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

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

> Шукаєте надійний сервер Ubuntu для виконання цих кроків? Плани VPS Hosting AlexHost надають вам повний доступ root, сховище SSD та миттєве розгортання — ідеально для цього випадку.

Зміст

  1. Передумови
  2. Налаштування директорій для кожного веб-сайту
  3. Створення прикладу HTML-вмісту
  4. Створення файлів конфігурації віртуального хоста
  5. Включення віртуальних хостів
  6. Тестування конфігурації Nginx
  7. Перезавантаження Nginx для застосування змін
  8. Доступ до ваших веб-сайтів
  9. Включення HTTPS з Let’s Encrypt (рекомендується)
  10. Усунення поширених проблем
  11. Висновок

Передумови

Перед тим як почати, переконайтеся, що виконані такі умови:

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.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-сертифікати для бізнесу, який потребує розширеної перевірки або підстановки символів.

Встановлення 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;
}

Усунення поширених проблем

Нав

15%

Збережіть 15% на всі хостинг-послуги

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

Використовуй код:

Skills
Почати