为什么我们需要在Node.js表达web框架下使用apache?

时间:2012-02-15 04:07:45

标签: apache node.js deployment express

我将部署我的node.js应用程序。

我只能使用纯粹的node.js启动自己的Web应用程序。

但我的fd告诉我,最好在apache或nginx下提供该网络应用程序。

任何人都有这样的经历,为什么我们需要apache,因为我可以在node.js + express上启动我的网络应用程序?

我想了解有关部署知识的更多信息。谢谢你的帮助。

4 个答案:

答案 0 :(得分:9)

将Apache置于Node之前在greenfield应用程序中并不常见。我可以批准的唯一情况是,如果您的公司在前端对基于Apache的基础架构(监控/安全/路由/缓存等)进行了现有投资,并且系统管理员坚持这种设置。

有些人喜欢在前面放置nginx或haproxy来管理路由规则,因此他们可以将静态文件(资产)的请求从Node.js传递出来(在处理静态文件时,node.js并不总是高效),或者做花哨的负载平衡或故障转移。在0.2.x等早期......甚至Ryan Dahl主张在Node.js面前运行一些主要用于安全的东西;虽然,我认为没有发现任何重大问题。我个人在Node.js面前运行nginx,因为我们有几个站点和服务点击了前端共享IP,我们代理回到不同内部端口上监听的各个节点实例。

Nginx比Apache更适合,因为它是轻量级和单线程的,而不是每个请求的Apache线程(在大多数正常设置中)。但是现在甚至还有一个可靠的(node-http-proxy排除)基于Node.JS的前端代理http://www.github.com/substack/bouncy,其中一个名人node.js开发人员使用/将使用它来构建他的PaaS。

答案 1 :(得分:3)

首先,是的,使用nginx而不是Apache - 配置nginx要容易得多,而且它更轻,效率更高。

预先使用nginx代理可以获得以下优势:

  • 能够为您网站的不同部分运行多个后端
  • 更快的静态文件服务器
  • 如果您需要关闭节点服务器,则清理重启(nginx可以提供漂亮的“维护不足”页面)
  • 登录您的节点应用程序可以专注于调试,nginx可以记录请求 - 保持良好和干净

可能还有其他我错过的东西。

nginx可以做的一件好事就是“try_files”指令,该指令首先查找本地文件,如果找不到它,则传递给Node后端。

答案 2 :(得分:1)

你不想使用Apache,因为Nginx更适合,因为Nginx是为异步I / O而构建的。您希望将Nginx用作转发代理服务,将客户端指向实际的node.js Web服务器。这允许在应用程序增长时进行水平扩展以处理增加的负载。因此,如果您的第一个Nginx服务器已经不再存在,那么您可以安装另一个Nginx服务器......您还可以对Node.js Web服务器执行相同的操作。

客户端网络浏览器< - > Nginx< - >快递app.js

如果您从nginx提供服务,然后使用Express作为动态内容,您还可以更快地提供静态内容。对于部署,您可能希望编写一个sh脚本来像正常一样复制和运行Express服务器并像正常一样运行您的Nginx服务器,但使用转发代理设置。你可以在Nginx中使用这样的脚本:

upstream your_domain_app {
    server 127.0.0.1:8000;
}

server {
    listen 0.0.0.0:80;
    server_name your_domain.com your_domain;
    access_log /var/log/nginx/your_domain.log;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://your_domain_app/;
      proxy_redirect off;
    }
 }

答案 3 :(得分:0)

使用像apache这样的网络服务器或在大多数情况下使用nginx的原因是:

  1. 负载平衡 - 在应用程序/ Web服务器前使用Web服务器进行负载平衡是非常常见的做法
  2. 缓存 - 与nodejs或其他此类应用程序服务器相比,像nginx这样的Webserver提供了广泛的缓存功能
  3. 请求处理 - 像nginx这样的纯网络服务器在处理多个请求方面远远优于高并发性。
  4. 像nginx这样的网络服务器的缓存和高级请求处理能力使它们成为在nodejs之前用作代理服务器的一个杀手选择,从而减轻了它们的负担。

    由于上述原因,使用Web服务器提供静态文件也很常见,而不是nodejs。