我的服务器名称如下:servername.myhostingcompany.com。当我运行示例 node.js 应用程序时,我可以在转到 servername.myhostingcompany.com:8124 时看到 hello world 消息。
但我不想使用服务器的主机名。
如何使 node.js 在不同的虚拟主机上运行并监听(例如 chat.mydomain.com:8124 或 www.mydomain.com:8124)?我认为这可以在 apache 配置中进行设置?
答案1
如果 apache 服务器没有监听端口 8124,那么我认为它与你的 apache 配置无关。摘自 node.js 文档:
服务器.监听(端口,[主机名],[回调])
开始接受指定端口和主机名上的连接。如果省略主机名,服务器将接受指向任何 IPv4 地址 (INADDR_ANY) 的连接。
您的示例 node.js 应用程序可能省略了主机名参数,因此它现在为端口 8124 下的每个可用主机名提供服务。
答案2
在 Node API 文档中,我认为“主机名”实际上是错误的术语。它们实际上是指 IP 地址。如果您在具有单个 IP 地址的服务器(例如典型的 VPS)上使用虚拟主机名,您仍会在两个主机名上获得响应。
因此,除非您有多个 IP 地址并且可以将子域分配给其中一个,否则在 server.listen 上设置主机名对您不起作用。
我认为你有两种选择可以实现这一点。
第一种是将 Node 限制为仅侦听本地主机(内部),并使用反向代理来处理传入的请求。代理会将请求转发到内部节点侦听器。这并不总是完全可靠的,因为反向代理对静态资源(例如图像文件)可能相当挑剔。此外,大多数反向代理都是“阻塞”的,因此可能会抵消使用 Node 的好处。也可以将 Node 与 http-proxy 库一起使用来进行代理。
第二种方法是使用一些中间件来处理 VHOST。 Express 通常用于此目的,尽管此功能实际上是由 Connect 中间件库提供的,您可以直接使用。请参阅:https://github.com/visionmedia/express/tree/master/examples/vhost