【问题标题】:Why do we need apache under Node.js express web framework?为什么我们需要Node.js express web框架下的apache?
【发布时间】:2012-02-15 04:07:45
【问题描述】:

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

我可以仅使用纯 node.js 启动我自己的 Web 应用程序。

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

任何人都有这样的经验,为什么我们需要 apache,因为我只能在 node.js+ express 上启动我的 web 应用程序?

我想了解更多关于部署的知识。感谢您的帮助。

套件

【问题讨论】:

  • 谁或什么是“fd”?
  • 外国外交官?职能总监?友好的开发者?院长? f****** d***?
  • 全栈开发者,我猜。

标签: apache node.js deployment express


【解决方案1】:

将 Apache 放在 Node 前面并不常见于未开发的应用程序中。我可以同意的唯一情况是,如果您的公司在前端已经对基于 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。

【讨论】:

  • 还是一头雾水,代理服务器在Node.js前面是干什么的?能详细说说nginx的使用吗??
  • 可能的原因之一是公共 IP 地址的可用性通常有限,并且您希望在 80 或 443 上运行所有服务(出于防火墙限制)。因此,除非您将请求代理回内部端口,否则如果您只能运行一两个可能不是很活跃的服务,那么 32GB 四核服务器将无法充分利用。
  • 我认为现在你应该直接运行 node.js 如果你的系统管理员或托管公司提供公共 IP 并让你命令端口 80。不再存在任何不存在的安全问题任何其他包,当您需要一个代理时,这样的要求/推理将很清楚..
【解决方案2】:

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

使用 nginx 代理,您可以获得以下优势:

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

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

Nginx 可以做的一个非常好的事情是“try_files”指令,它会首先查找本地文件,如果找不到,它会传递给 Node 后端。

【讨论】:

    【解决方案3】:

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

    1. 负载平衡 - 在应用程序/Web 服务器前面使用 Web 服务器进行负载平衡是很常见的做法
    2. 缓存 - 与 nodejs 或其他此类应用程序服务器相比,像 nginx 这样的 Web 服务器提供了广泛的缓存能力
    3. 请求处理 - 像 nginx 这样的纯网络服务器在一次处理多个请求(即高并发)方面要优越得多。

    像 nginx 这样的网络服务器的缓存和高级请求处理能力使其成为在 nodejs 前用作代理服务器以减轻它们的负载的杀手级选择。

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

    【讨论】:

      【解决方案4】:

      您不想使用 Apache,因为 Nginx 更适合,因为 Nginx 是为异步 I/O 构建的。您想使用 Nginx 作为转发代理服务,将您的客户端指向实际的 node.js Web 服务器。这允许随着您的应用程序增长以处理增加的负载时进行水平扩展。因此,如果您的第一个 Nginx 服务器超出了您的容量,您可以安装另一个又一个...您也可以对您的 Node.js Web 服务器执行相同的操作。

      客户端网络浏览器 Nginx Express 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;
          }
       }
      

      【讨论】:

      • 请问水平缩放是什么意思?以及为什么静态文件在 Node.js 框架中的服务速度较慢???
      • @KitHo 随着负载的增长,您可以添加新的 Nginx 服务器并将它们指向您的新 Node.js Web 服务器。水平意味着您添加更多服务器。垂直意味着您升级到更快的服务器。水平通常看起来更好。您还可以使用 Google Nginx 负载平衡。
      • 据我了解,它的效率只是略微降低,并且在您准备好扩展之前不会影响您(然后您会查看微优化)。 nginx 是用纯 C 编写的,并进行直接系统调用以以最佳方式处理静态文件服务,我相信在 node.js 中,文件块必须先复制到 v8 缓冲区,然后再复制到节点用户域并退出,尽管 node.js 发展得如此之快,但今天可能并非如此。
      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 2010-11-24
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多