将子域名发送到node.js

21

我的工作在一台Ubuntu服务器(版本为10.10)上运行了几个不同的内部Web应用程序,这些应用使用Apache。我目前正在开发另一个Web应用程序,并且正在认真考虑在自定义的node.js Web服务器上进行开发。我之所以想要这样做,原因如下:

  1. 速度/可扩展性
  2. 安全性-页面将使用switch ... case提供,而不是仅提供(潜在恶意的)用户请求的内容。
  3. 易于设置-我的意图是将其作为开源项目发布,而Node.js比处理Apache/IIS等更容易为用户设置。

我的问题是,在我已经让Apache监听端口80的服务器上,如何将某些子域名传递给node.js。我看到过一些关于使用Apache虚拟主机来传递的文章,但似乎这违背了使用node.js的目的。如果必须通过Apache进行,则我避免Apache/IIS的三个原因都将失效。

我知道我可以使用不同的端口(:8080?),但从最终用户的角度来看,必须输入自定义端口非常令人困惑。还有其他的想法吗?

谢谢

6个回答

27

8
如果socket.io node正在运行,请确保启用以下几个Apache模块:
  1. a2enmod proxy
  2. a2enmod proxy_balancer
  3. a2enmod proxy_express
  4. a2enmod proxy_http
请在文件/etc/apache2/sites-available/chat.example.com.conf中进行设置。
<VirtualHost *:80>
    ServerName chat.example.com

    <Location "/">
        ProxyPreserveHost On
        ProxyPass http://localhost:3000/
        ProxyPassReverse http://localhost:3000/
    </Location>
</VirtualHost>

当然,接下来需要执行 service apache2 reload 命令。

4
让我从基础开始:
您有一个DNS。DNS服务器将一个DNS映射到一个IP!
然后,您的计算机上运行apache,它在端口port 80上监听连接,用于http://,并在端口443上监听连接,用于https://http://example/实际上是对http://example:80/的请求。
您无法使用node.js在与apache相同的机器上使用相同的端口进行监听。这就是为什么使用端口8080是可行的原因。
您还可以将子域映射到不同的IP。唯一的注意事项是您需要拥有公共IP地址。

4
如何换个思路:将节点绑定到80端口,处理针对子域名的流量,并将其用作反向代理,用于其他所有内容的apache?

你知道有哪些好的node.js模块/扩展或教程吗?或者至少有什么好的关键词可以搜索到相关内容吗? - jwegner
Node http proxy 可以解决这个问题。 - Adrien

4

你不能同时从Apache和node.js提供端口80服务。将Apache作为反向代理并不是很有效,这就是为什么在这种情况下nginx很受欢迎的原因。除了基于nginx的反向代理之外,还有其他选择,例如Khez建议将子域映射到不同的IP地址,这将使node.js程序监听,或者使用node.js本身作为Apache的反向代理。


1
您可以在Apache中为您的新站点配置虚拟主机,并在其中添加永久重定向到Node.js使用的本地主机和端口。
这是我在一个有多个其他虚拟主机和我的Node.js应用程序运行在端口3000上的服务器上的做法:
NameVirtualHost *:80
[为简洁起见省略了其他虚拟主机]

...

ServerName mynewsite.com RedirectMatch (.*) http://localhost:3000$1

服务器名称为mynewsite.com 重定向匹配(.*) http://localhost:3000$1


1
我知道这已经过去一年了...这真的有效吗?我注意到这个答案没有得到任何赞,而所有其他帖子都说OP所要求的是不可能的。 - Matt H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接