Гид по технологиям

Как настроить виртуальные хосты Nginx на Ubuntu

6 min read Веб-сервер Обновлено 14 Dec 2025
Виртуальные хосты Nginx на Ubuntu
Виртуальные хосты Nginx на Ubuntu

Введение

женщина-инженер настраивает сервер Nginx

Виртуальные хосты позволяют запускать несколько сайтов с разными доменными именами или портами на одном физическом сервере или виртуальной машине. Такой подход экономит ресурсы и упрощает сопровождение — именно так устроены тарифы общего хостинга.

Nginx — легковесный и высокопроизводительный веб- и обратный прокси-сервер. Инструкция рассчитана на Ubuntu и подойдёт как для локальной разработки, так и для небольших продакшен-сценариев.

Что такое виртуальный хост?

Виртуальный веб‑хост — это метод размещения нескольких веб‑сайтов на одном сервере, где каждый сайт может иметь своё доменное имя и конфигурацию. Существует два основных подхода:

  • По имени (name-based): несколько server-блоков слушают один порт (обычно 80/443) и выбирают сайт по заголовку Host. Это самый распространённый способ в продакшене.
  • По порту (port-based): каждый сайт слушает уникальный порт (например, 80 и 81). Удобно для тестирования и на машинах без настроенного DNS.

Шаг 1 — Установка Nginx

Если Nginx ещё не установлен, выполните эти команды в Ubuntu.

Обновите индекс пакетов:

sudo apt update

Установите Nginx:

sudo apt install nginx

Тестирование Nginx

Запустите сервис:

sudo systemctl start nginx

Проверьте статус:

sudo systemctl status nginx

Откройте в браузере http://localhost:80. Должна отобразиться стандартная стартовая страница Nginx.

стандартная страница Nginx

Шаг 2 — Создание каталога сайта и начальной страницы

По умолчанию корневой каталог веб‑сайта: /var/www/html. Для каждого сайта рекомендуется создать собственный каталог, чтобы изоляция и управление были проще.

Перейдите в каталог /var/www и создайте папку для сайта (в примере — VirtualHost):

cd /var/www
sudo mkdir -p VirtualHost

Создайте файл index.html:

cd /var/www/VirtualHost
sudo touch index.html
sudo tee index.html > /dev/null <<'HTML'



  
  Nginx: Web & Reverse proxy server


  

Welcome to Nginx

I've just configured a virtual host using Nginx web server on Linux

HTML

Проверьте права доступа: пользователь, под которым работает веб‑сервер (обычно www-data), должен иметь доступ к файлам.

sudo chown -R www-data:www-data /var/www/VirtualHost
sudo chmod -R 750 /var/www/VirtualHost

Шаг 3 — Конфигурация виртуального хоста

Файлы конфигурации Nginx находятся в /etc/nginx. На Ubuntu обычно используются каталоги /etc/nginx/sites-available и /etc/nginx/sites-enabled.

Перейдите в каталог с активными конфигурациями и создайте новый файл:

cd /etc/nginx/sites-enabled
sudo touch virtual_host
sudo chmod 644 virtual_host
sudo nano virtual_host

Вставьте в файл такой блок конфигурации (пример с портом 81):

server {
    listen 81;
    listen [::]:81;

    server_name my.virtualhost.com;

    root /var/www/VirtualHost;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Сохраните и закройте файл.

Пояснения ключевых директив:

  • listen — указывает порт, на котором будет доступен сайт (в примере 81). Для production обычно 80/443.
  • server_name — доменное имя, по которому Nginx выбирает блок server. Для теста можно оставить любое имя и добавить запись в /etc/hosts.
  • root — корневой каталог сайта.
  • index — файл по умолчанию.
  • try_files — безопасная проверка наличия статических файлов, возвращает 404, если файл не найден.

Важно: на реальном сервере предпочтительнее размещать конфиги в /etc/nginx/sites-available и делать символьную ссылку в sites-enabled: sudo ln -s /etc/nginx/sites-available/virtual_host /etc/nginx/sites-enabled/virtual_host

Шаг 4 — Применение и проверка

Перезапустите Nginx, чтобы применить изменения:

sudo systemctl restart nginx

Проверьте статус сервера и наличие ошибок в конфигурации:

sudo nginx -t
sudo systemctl status nginx

Откройте в браузере http://localhost:81. Если всё настроено правильно, вы увидите страницу из /var/www/VirtualHost/index.html.

Nginx обслуживает веб-сайт

Теперь на сервере работают два сайта: один на порту 80, другой на порту 81.

Дополнительно: как использовать имя хоста вместо порта

Для тестирования name-based хостинга на локальной машине можно добавить запись в /etc/hosts:

sudo -- bash -c 'echo "127.0.0.1 my.virtualhost.com" >> /etc/hosts'

Измените listen на 80 и server_name на my.virtualhost.com, затем перезапустите Nginx. В браузере откройте http://my.virtualhost.com.

Когда этот способ не подходит

  • Если вы хотите, чтобы сайты были доступны по разным доменам в интернете — потребуется корректный DNS и публичный IP. Локальная запись /etc/hosts не работает для внешних пользователей.
  • Если у вас ограничены порты (например, файрвол блокирует нетипичные порты), использование портов выше 1024 может быть неудобным.
  • Для высоконагруженных или изолированных приложений часто лучше использовать отдельные виртуальные машины или контейнеры.

Альтернативные подходы

  • Использовать name-based виртуальные хосты (несколько server-блоков на порту 80/443).
  • Воспользоваться Docker-контейнерами и Traefik/NGINX как обратным прокси с динамической маршрутизацией.
  • Запускать каждый сайт в отдельном виртуальном хосте (VM) при строгой изоляции и требованиях безопасности.

Быстрый чеклист по безопасности

  • Отключайте автосписок директорий: в server-блоке добавьте autoindex off; (по умолчанию выключено в большинстве конфигураций).
  • Доступ к файлам: владелец www-data, права 750/640 для директорий/файлов.
  • Ограничьте возможные методы запроса: добавьте директивы для защиты от ненужных методов.
  • Логирование: сохраняйте access и error логи по отдельным файлам для каждого сайта.
  • TLS: для публичных доменов настройте HTTPS с помощью Let’s Encrypt и certbot.
  • Ограничьте размер загрузок и таймауты client_max_body_size, client_body_timeout.

Диагностика распространённых проблем

  • Nginx не запускается: выполните sudo nginx -t для проверки синтаксиса. Посмотрите /var/log/nginx/error.log.
  • Пустая страница или 403: проверьте права на файлы и директиву root.
  • 404 на существующие файлы: проверьте try_files и правильность root.
  • Конфликт портов: убедитесь, что другой процесс (например, Apache) не занимает порт.

Мини‑методология: как развернуть сайт за 10 минут

  1. Установить Nginx: sudo apt install nginx
  2. Создать каталог /var/www/имя_сайта и положить index.html
  3. Создать конфигурацию server в /etc/nginx/sites-available
  4. Сделать ln -s в sites-enabled
  5. Проверить конфиг: sudo nginx -t
  6. Перезапустить: sudo systemctl restart nginx
  7. Проверить в браузере

Тесты и критерии приёмки

  • Nginx успешно проходит проверку конфигурации: sudo nginx -t — без ошибок.
  • Сервер слушает целевой порт: sudo ss -tln | grep 81
  • Веб‑страница загружается корректно по URL (HTTP 200).
  • Логи не показывают ошибок 5xx при простом GET.

Шпаргалка команд (cheat sheet)

  • Установка: sudo apt install nginx
  • Проверка конфигурации: sudo nginx -t
  • Перезапуск: sudo systemctl restart nginx
  • Старт/стоп: sudo systemctl start|stop|status nginx
  • Права: sudo chown -R www-data:www-data /var/www/YourSite
  • Добавить хост в hosts: sudo – bash -c ‘echo “127.0.0.1 example.com” >> /etc/hosts’

Модель принятия решения: порт или имя?

flowchart TD
  A[Нужен внешний доступ по домену?] -->|Да| B[Использовать name-based 'порт 80/443']
  A -->|Нет, только локально| C[Можно использовать порт-based 'например, 81']
  B --> D[Настроить DNS и TLS]
  C --> E[Добавить запись в /etc/hosts для теста]

Короткий глоссарий

  • virtual host — способ размещения нескольких сайтов на одном сервере.
  • server_name — директива Nginx для имени хоста.
  • root — корневая директория сайта.
  • try_files — директива для проверки наличия файлов и безопасной отдачи.

Советы по миграции с Apache на Nginx

  • Перенесите правила перезаписи (mod_rewrite) в эквивалентные директивы Nginx (try_files, rewrite).
  • Проверьте конфигурацию слушания портов и файлы виртуальных хостов.
  • Тестируйте на staging перед продакшеном.

Итог

Вы научились: устанавливать Nginx, создавать корневую папку сайта, настраивать виртуальный хост (на примере порта 81), перезапускать сервер и диагностировать ошибки. Это базовый набор навыков для размещения нескольких сайтов на одном сервере.

Важно: для публичных сайтов обязательно настраивайте HTTPS и следите за безопасностью файловой системы.

Краткое резюме ниже.

Краткое резюме

  • Создайте отдельный каталог сайта в /var/www.
  • Создайте конфигурацию server и подключите её в sites-enabled.
  • Используйте nginx -t перед перезапуском.
  • Для публичного доступа настройте DNS и HTTPS.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Отслеживание скорости подростка с Automatic Pro
Автотехника

Отслеживание скорости подростка с Automatic Pro

Lens — графический клиент для Kubernetes
Kubernetes

Lens — графический клиент для Kubernetes

Очистить историю загрузок в Firefox
Браузеры

Очистить историю загрузок в Firefox

Стрим с Apple Silicon: настройка M1/M2 Mac
Стриминг

Стрим с Apple Silicon: настройка M1/M2 Mac

Как использовать PGP в ProtonMail
Безопасность

Как использовать PGP в ProtonMail

Как изменить и скрыть дату рождения в Snapchat
Социальные сети

Как изменить и скрыть дату рождения в Snapchat