NodeJs而不是Apache

时间:2015-10-25 18:19:03

标签: node.js apache http amazon-web-services amazon-ec2

我在域下有一个网站(比如example.com),该网站托管在Amazon Web Services EC 2实例上,该实例已安装Apache并准备在端口80上运行。现在我希望从Apache转移到节点JS(其中)节点JS在另一个端口上运行,比如8001)。如何更改EC 2的HTTP端口地址,说当我转到该URL(example.com)时,它应该在节点JS而不是Apache上运行(而对于临时,节点JS)在example.com:8001上运行。 怎么可能和亲切的帮助?

1 个答案:

答案 0 :(得分:2)

因此,您无法将标准Web地址(例如www.example.com)指向端口80以外的任何其他位置。默认情况下,http位于端口80上,https位于端口443上。您可以通过显式提供端口来覆盖该默认值但你不能改变那个默认值。

所以你的选择是:

  1. 将Apache替换为端口80上的节点。这将涉及关闭Apache(并确保它在重新启动时不会自动重启),并将节点端口更改为端口80.这也可能需要运行您的作为root的节点服务(因为端口80通常受到保护)并且不建议这样做(Apache以root身份启动以获取端口,但通常会立即切换到非root用户)。

  2. 让Apache代理向Node转发请求。这意味着Apache仍然是您的主要Web服务器并侦听端口80,但某些请求将发送到节点。

  3. 第二个选项可以使用mod_proxy和config这样完成:

     ProxyPass "/foo" "http://localhost:8001/"
     ProxyPassReverse "/foo" "http://localhost:8001/"
    

    这完全取决于您想要使用的设置,并充分利用您可以使用的软件。

    典型设置是一种涉及以下一个或多个的多层方法:

    • LoadBalancer(高负载站点或弹性为关键的可选项)
    • 网络服务器
    • APPSERVER
    • 数据库

    是的,您只能将Node用于所有这些图层。但是,对我来说,它更像是一个应用服务器,而不是一个网络服务器。

    像Apache或Nginx这样的网络服务器专门设计为像网络服务器一样,我的意思是服务静态页面和做其他顶级的东西。它们具有多年来积累的多种功能,可提供速度和安全性。现在几乎所有他们可以做的事情都可以在Node中完成,但不是那么容易而且不是标准的,并且通常需要引入第三方模块。

    然后,网络服务器通常会将动态工作卸载到其他程序。这可以是脚本(PHP或Perl),也可以是单独的应用服务器,如Tomcat,Jboss或Node。这些通常非常擅长于特定任务(例如与数据库交谈并生成动态页面),但不太能快速切断静态页面。

    对我而言,节点的美妙之处在于微服务,在这里你可以拥有许多独立但可能相互关联的节点服务,这些服务都是轻量级的,擅长于一项任务,并且仍然需要Web服务器。相比之下,您将在过去尝试使用Tomcat或Jboss这样的庞大的多任务J2EE服务器尝试在一个进程下执行每个动态应用程序(尽管通常在单独的WAR文件下)。

    因此,在不知道您的完整用例的情况下,我建议使用Apache 节点而不是Node替换Apache。