2011-04-09 72 views
15

我的工作在运行apache的ubuntu服务器(10.10)上运行几个不同的内部web应用程序。我目前正在开发另一个Web应用程序,并且正在认真考虑在定制的Node.js Web服务器上进行开发。我为希望这样做的理由是:发送子域名到node.js

  1. 速度/可扩展性
  2. 安全 - 网页将与开关...情况下提供服务,而不是仅仅服务有求必应的(潜在的恶意软件)的用户。
  3. 易于设置 - 我的目的是为了成为一个开源项目,并且node.js对于用户来说更容易设置,而不是处理apache/IIS /等。

我的问题是,在一台服务器上,我有apache监听端口80,我怎样才能将某个子域传递给node.js.我见过一些关于使用apache虚拟主机传递它的文章,但是这似乎打破了使用node.js的目的。如果我必须通过apache,那么我所有避免使用apache/IIS的三个理由都已经失效了。

我知道我可以使用不同的端口(:8080?),但是从最终用户的角度来看,必须放入自定义端口非常混乱。任何替代的想法?

感谢

回答

5

如何做另一种方式:将节点绑定到端口80,处理针对子域的流量并将其用作apache的反向代理以完成其他任务?

+0

任何好的Node.js的模块/扩展或你知道的这个教程?或者至少有一个好的关键字用来搜索? – jwegner 2011-04-09 17:36:58

+0

[节点http代理](https://github.com/nodejitsu/node-http-proxy)应该做的伎俩。 – Adrien 2011-04-09 18:24:12

4

让我从地上爬起来开始:

你有DNS。而一个DNS服务器将一个DNS映射到一个IP!

你就必须apache计算机侦听的http://和端口443 https://port 80连接上运行。 http://example/实际上是http://example:80/上的一项请求。

您不能使用node.js在与apache相同的端口上侦听同一台计算机。这就是为什么使用8080端口是可行的。

您也可以将子域映射到不同的IP。唯一需要注意的是你需要有一个公共IP地址。

4

您无法从Apache和node.js中为端口80提供服务。将Apache作为reverse proxy不会很有效,这就是为什么nginx在这种情况下非常流行的原因。除了基于nginx的反向代理之外,其他的替代方法可以如Khez建议的将子域映射到不同的IP地址,其将node.js编程为listen,或者可以使用node.js本身作为Apache的反向代理。

1

您可以在apache中为您的新站点配置一个虚拟主机,并将其中的永久重定向添加到node.js使用的本地主机和端口中。

这就是我如何在具有其他几个虚拟主机和我的节点的服务器上执行此操作。JS应用运行在端口3000:

了NameVirtualHost *:(。*)80

[其他虚拟主机不再赘述]

...

服务器名mynewsite.com RedirectMatch http://localhost:3000 $ 1

+1

我知道这是一岁...这实际上工作吗?我注意到这个答案得到了0赞同,所有其他帖子都说OP要求的是不可能的。 – 2012-09-10 16:55:38

2

如果socket.io节点正在运行,一定也使一些阿帕奇MODS:

  1. a2enmod代理
  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