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 Domain Registration и управляйте записями 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;
}

Устранение распространённых проблем

Даже при тщательной конфигурации могут возникнуть проблемы. Вот наиболее распространённые проблемы и способы их решения:

502 Bad Gateway

Обычно это означает, что Nginx не может взаим

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать