Виртуальные хосты в Nginx






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


По своей природе виртуальные хосты бывают двух типов: «name-based» и «address-based». Хосты первого типа сервер обслуживает на основе их доменного имени, получаемого от клиента в момент запроса. Виртуальные Хосты второго типа обслуживаются сервером на основании IP-адреса интерфейса, на который поступил запрос от клиента. Также, конечно же, можно комбинировать эти два типа, т. е. на определённом IP-интерфейсе «вешать» определённые name-based виртуальные хосты.

Если вы читали одну из предыдущих статей о конфигурировании Nginx, то должны помнить опцию server, используемую для создания секции виртуального хоста. Таких секций в вашем файле конфигурации может быть множество, где каждая будет описывать отдельный виртуальный хост. Таким образом, файл конфигурации, описывающий несколько виртуальных хостов, будет выглядеть примерно так:

Name-based

Теперь давайте попробуем на практике создать конфигурацию для пары виртуальных name-based виртуальных хостов domain-1.com и domain-2.com. Создайте новый файл конфигурации Nginx, например, в /etc/nginx/sites-available/twohosts (напоминаю ещё раз: все примеры рассматриваются в контексте установленного из репозиториев Nginx в Debian 5) и откройте его в текстовом редакторе. Следующая конфигурация описывает два виртуальных хоста:

Обратите внимание, что в конфигурации обоих хостов отсутствует параметр listen, определяющий IP-адрес интерфейса и порт, на котором хосты будут ожидать входящих соединений. Таким образом, описанные выше виртуальные хосты будут ожидать соединений на любом интерфейсе, на порту 80. Далее создайте каталоги для хранения контента:

И поместите в них по индексному файлу с различным содержимым, чтобы отличить при подключении из браузера один от другого:

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

И перезапускаем сервер:

Не забудьте добавить в /etc/hosts вашего клиентского компьютера необходимые записи (естественно, не забудьте заменить IP-адрес сервера на тот, который у вас):

На этом всё. Теперь попробуйте с клиентского компьютера открыть браузером URL http://domain-1.com и http://domain-2.com. Если всё настроено верно, то по каждому из URL вы увидите строки «Domain 1» и «Domain 2» соответственно.

Address-based

Иногда бывает необходимо, чтобы виртуальный хост был доступен только по определённому адресу, а не со всех интерфейсов сервера. Здесь на помощь приходит уже известный по предыдущим публикациям параметр listen. Допустим, у вашего сервера есть два интерфейса: 192.168.0.1 и 192.168.0.2. Вам необходимо, чтобы виртуальный хост domain-1.com был доступен только по адресу 192.168.0.1, а хост domain-2.com — по адресу 192.168.0.2. Всё, что вам нужно сделать это задействовать параметр listen в конфигурации каждого из виртуальных хостов:




Виртуальные хосты в Nginx: 4 комментария

  1. Замечательный цикл статей. Я раньше не имел дело с nginx, обходясь только apache, но теперь есть повод поставить первый.

Комментарии запрещены.