Имя моего сервера выглядит так: servername.myhostingcompany.com. Когда я запускаю пример приложения node.js, я вижу сообщение hello world, когда перехожу на servername.myhostingcompany.com:8124.
Однако я не хочу использовать имя хоста сервера.
Как я могу заставить node.js запускаться и слушать на другом виртуальном хосте (например, chat.mydomain.com:8124 или www.mydomain.com:8124)? Я предполагаю, что это можно настроить в конфигурации apache?
Я думаю, что в документации по Node API термин «имя хоста» - неправильный. Они действительно имеют в виду IP-адрес. Если вы используете имя виртуального хоста на сервере с одним IP-адресом (например, типичный VPS), вы все равно будете получать ответы на оба имени хоста.
Таким образом, установка имени хоста на server.listen не сработает для вас, если у вас нет нескольких IP-адресов и вы не можете назначить субдомен одному из них.
Я думаю, что у вас есть два варианта, как заставить эту работу работать.
Первый - ограничить Node прослушиванием только на локальном хосте (внутреннем) и использовать обратный прокси-сервер для обработки входящего запроса. Прокси-сервер пересылает запрос внутреннему слушателю узла. Это не всегда полностью надежно, поскольку обратный прокси-сервер может быть довольно требовательным к статическим ресурсам, таким как файлы изображений. Кроме того, большинство обратных прокси-серверов «блокируют» и поэтому могут свести на нет преимущества использования Node. Также можно использовать Node с библиотекой http-proxy для проксирования.
Второй подход - использовать промежуточное ПО для обработки VHOST. Для этого обычно используется Express, хотя эта возможность фактически предоставляется библиотекой промежуточного программного обеспечения Connect, которую вы можете использовать напрямую. Видеть: https://github.com/visionmedia/express/tree/master/examples/vhost
Если сервер apache не прослушивает порт 8124, я думаю, он не должен ничего делать с вашей конфигурацией apache. Из документации node.js:
server.listen (порт, [имя хоста], [обратный вызов])
Начните принимать соединения на указанном порту и имени хоста. Если имя хоста не указано, сервер будет принимать соединения, направленные на любой адрес IPv4 (INADDR_ANY).
В вашем примере приложения node.js параметр hostname, вероятно, опущен, поэтому теперь оно обслуживает каждое доступное имя хоста через порт 8124.