Создание виртуальных доменов с помощью промежуточного программного обеспечения vhost

Во-первых, что такое VHost?

vhost - это промежуточный пакет NodeJS, который служит простым менеджером для сегментации трафика для определенных служб на основе запрашиваемого имени хоста. Чаще вы увидите vhost, который используется на серверах Express, поскольку он включен в стандартную библиотеку Express viaExpress.vhost.

Глядя на vhost исходники на github, код на самом деле довольно прост. Все, что он делает, это считывает значение req.headers.host, а затем имеет несколько вспомогательных функций для проверки RegEx на проанализированном имени хоста. По своей сути пакет проверяет имя хоста запроса на соответствие указанному регулярному выражению.

Несмотря на простую реализацию, он позволяет вашему серверу организовывать и ограничивать HTTP-трафик для разных имен хостов.

Когда его следует использовать?

Некоторые распространенные варианты использования vhost промежуточного программного обеспечения на вашем сервере:

  • Вашему серверу необходимо по-разному обрабатывать запросы, поступающие от разных имен хостов (включая поддомены).
  • Вы хотите ограничить входящий трафик с определенных маршрутов (хотя это можно сделать и другими способами).
  • Вы можете создать несколько имен хостов, чтобы избежать «ограничения максимального количества подключений к хостам» в браузерах.
  • Вы хотите добавить / удалить / обновить определенные свойства запроса (например, настраиваемые заголовки) на основе запрашиваемого имени хоста.

Простой пример VHost

В этом примере показано, как можно сегментировать приложение по имени виртуального хоста (в данном примере это поддомен) и направлять их в конкретную службу.

const connect = require('connect')
const vhost = require('vhost')
const server = connect()
const emailApp = connect()

const userApp = connect()

server.use(vhost('email.local', emailApp))

server.use(vhost('*.user.local', userApp))

server.listen(3000)

Этот простой сервер будет использовать emailApp только для запросов с хостом, который соответствует email.local, а userApp будет обрабатывать только запросы, поступающие из поддоменов *.user.local.

В репозитории есть пара похожих примеров:
https://github.com/expressjs/vhost/blob/master/README.md

По промежуточного слоя также добавляет различные .vhost свойства к объекту запроса, как показано ниже.

app.use(vhost('*.*.example.com', (req, res, next) => {
  console.log(req.vhost.host) // => 'foo.bar.example.com:8080'
  console.log(req.vhost.hostname) // => 'foo.bar.example.com'
  console.log(req.vhost.length) // => 2
  console.log(req.vhost[0]) // => 'foo'
  console.log(req.vhost[1]) // => 'bar'
}))

Вы можете видеть, что промежуточное ПО vhost хорошо проанализировало хост, чтобы его было проще использовать в обработчике.

Заключение

Надеюсь, эта статья помогла вам понять простоту vhost промежуточного программного обеспечения. Концепция «виртуальных доменов» может показаться устрашающей, но на практике мы видим, насколько они просты. Это простой и понятный способ управления взаимодействием различных хостов с вашим сервером.