将子域发送到node.js

时间:2011-04-09 16:25:42

标签: apache node.js virtualhost

我的工作在运行apache的ubuntu服务器(10.10)上运行几个不同的内部Web应用程序。我目前正在开发另一个Web应用程序,我正在认真考虑在定制的node.js Web服务器上进行开发。我想要这样做的理由是:

  1. 速度/可扩展性
  2. 安全性 - 页面将通过交换机...案例提供,而不仅仅是为(潜在的恶意)用户提供服务。
  3. 易于设置 - 我的意图是将其作为一个开源项目,并且node.js更易于用户设置,而不是处理apache / IIS /等。
  4. 我的问题是,在我听到端口80的apache的服务器上,如何将某个子域传递给node.js.我已经看过几篇关于使用apache虚拟主机传递它的文章,但这似乎打败了使用node.js的目的。如果我必须通过apache,那么我避免使用apache / IIS的所有三个原因都已经无效了。

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

    由于

6 个答案:

答案 0 :(得分:22)

<VirtualHost *:80>
ServerName subdomain.yourdomain.com
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
</VirtualHost>

感谢http://www.chrisshiplet.com/2013/how-to-use-node-js-with-apache-on-port-80/

答案 1 :(得分:5)

如何反过来做事:将节点绑定到端口80,处理针对子域的流量并将其用作apache的反向代理以用于其他所有内容?

答案 2 :(得分:4)

让我从头开始:

你有DNS。并且dns服务器将一个DNS映射到一个IP!

然后,您的计算机上运行了apache,用于监听http://上的https://http://example/的端口443上的连接。 http://example:80/实际上是node.js上的请求。

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

您还可以将子域映射到其他IP。这里唯一需要注意的是你需要一个公共IP地址。

答案 3 :(得分:4)

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

答案 4 :(得分:4)

如果socket.io节点正在运行,请务必启用少量apache mods:

  1. a2enmod proxy
  2. a2enmod proxy_balancer
  3. a2enmod proxy_express
  4. a2enmod proxy_http
  5. 文件 /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

答案 5 :(得分:1)

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

这是我在具有多个其他虚拟主机的服务器上运行的方式,以及在端口3000上运行的node.js应用程序:

NameVirtualHost *:80

[为简洁省略了其他虚拟主机]

...

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