【问题标题】:Nginx and Node.js - Utilizing server to fullestNginx 和 Node.js - 充分利用服务器
【发布时间】:2017-10-03 07:39:59
【问题描述】:

出于实验/学习目的(假设我的应用程序有很多持久/并发流量),我有一个运行 docker 的 VM。对于 docker,我有以下设置:

一切都有自己的容器并与端口通信。我正在尝试模拟两个不同的服务器 (Nginx),由 HAProxy 进行负载平衡。

现在一切正常,但据我所知,Node 仍然在单线程中运行。

Nginx 包含的唯一配置是作为 Node 的反向代理(其他一切都是默认的)。每个 Nginx 服务器每台服务器(节点)只处理一个域。

  • 我应该使用 Node Cluster 进行多线程方法吗?

  • 或者(假设每个服务器有 2 个核心)我应该为每个 Nginx 服务器创建两个节点实例并进行负载平衡吗?在这种方法中,我不确定负载平衡将如何工作。如果有两个 Node 实例,由 Nginx(或 HAProxy)负载均衡,那么它看起来像:

现在我想要 Nginx 的原因是用于静态缓存和 DDOS 保护之类的东西。这真的有意义吗?或者我应该在没有 HAProxy 的情况下在所有四个节点服务器之间只使用一个 Nginx 负载平衡(我引入 HAProxy 的原因是因为一些研究表明它比 Nginx 更快/更可靠(未经证实)。


对此还是陌生的。基本上,我想模拟两台服务器,每台服务器都有两个内核,每个内核都运行 Node.js,由 Nginx 反向代理以进行静态缓存等,并由 HAProxy 进行负载平衡。

【问题讨论】:

    标签: node.js nginx docker proxy load-balancing


    【解决方案1】:

    找到了答案(不久前,但只是更新这篇文章以防它对某人有帮助)。

    Nginx 可以运行多个工作进程。所以我们可以使用多个虚拟服务器块来实现这一点。我目前使用 Docker/Nginx/Node 的方法是:

    • Nginx 服务器块 1: 这会监听端口 81 上的所有请求。并将所有这些请求转发到节点实例(我们称之为 node1) .

    • Nginx 服务器块 2: 这会监听端口 82 上的所有请求。并将所有请求转发到另一个节点实例(我们称之为 node2)。

    简单来说,一个服务器块与node1通信,另一个与node2通信,其中node1和node2是两个节点实例(独立的docker容器)。

    这些然后由 HAProxy 负载平衡。其中服务器配置(按照docker)如下:

    server n1 nginx:81
    server n2 nginx:82
    

    nginx 是容器名称。 Nginx 当前运行 2 个工作进程。 (添加所需的任何 http/tcp 检查,这只是最低配置)。

    欢迎提出更好方法的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2021-07-01
      相关资源
      最近更新 更多