我的工作在运行apache的ubuntu服务器(10.10)上运行几个不同的内部Web应用程序。我目前正在开发另一个Web应用程序,我正在认真考虑在定制的node.js Web服务器上进行开发。我想要这样做的理由是:
我的问题是,在我听到端口80的apache的服务器上,如何将某个子域传递给node.js.我已经看过几篇关于使用apache虚拟主机传递它的文章,但这似乎打败了使用node.js的目的。如果我必须通过apache,那么我避免使用apache / IIS的所有三个原因都已经无效了。
我知道我可以使用不同的端口(:8080?),但从最终用户的角度来看,放入自定义端口非常困惑。还有其他想法吗?
由于
答案 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:
文件 /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