当前位置: 首页 > 知识库问答 >
问题:

如何使两个docker容器之间的nginx反向代理负载平衡?

梁浩
2023-03-14

我尝试在使用相同nodejs应用程序的两个容器之间实现nginx反向代理负载平衡。

目录结构:

.
+-- docker-compose.yml
+-- nginx
+-- nodejs
|   +-- index.js
|   +-- …
+-- php

docker撰写。yml

version: "3.1"

services:

  nginx-proxy:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    links:
      - php:php-app
      - nodejs:nodejs-app

  nodejs:
    image: node:alpine
    environment: 
      NODE_ENV: production
    working_dir: /home/app
    restart: always
    volumes:
      - ./nodejs:/home/app
    command: ["node", "index.js"]

  php:
    image: php:apache
    volumes:
      - ./php:/var/www/html

索引。js在端口侦听8080

nginx confdefault.conf

upstream nodejs-upstream {
  server nodejs-app:8080;
}

server {
  listen 80;
  root /srv/www;

  location / {
    try_files $uri @nodejs;  
  }

  location @nodejs {
    proxy_pass http://nodejs-upstream:8080;
    proxy_set_header Host $host;
  }

  location /api {
    proxy_pass http://php-app:80/api;
    proxy_set_header Host $host;
  }
}

现在我启动应用程序

docker-compose up  --scale nodejs=2

它负载平衡吗?

  • 我不这么认为,因为nodejs应用程序的两个实例在同一个端口上侦听8080

如何在nodejs应用程序的两个实例之间实现nginx服务器负载平衡?

有更好的方法吗?

编辑1

我仍然很想知道在没有jwilder/nginx代理的情况下如何做到这一点。谢谢

编辑2

我有一些工作与:

默认值。形态

upstream nodejs-upstream {
  server nodejs_1:8080;
  server nodejs_2:8080;
}

这在两个nodejs容器启动时起作用。当Idocker stop nodejs_2时,应用程序仍然可用(负载平衡似乎可以工作),但请求结束时可能非常慢(在本地主机上最多1分钟)。如果我重新启动这个容器,它会再次正常工作…


共有1个答案

常朗
2023-03-14

有没有更好的办法?

是的,IMO。使用jwilder/nginx方法。它会自动更新并发现任何新容器,并将其添加到平衡池中。

https://github.com/jwilder/nginx-proxy

version: "3.1"

services:

  nginx-proxy:
    image: jwilder/nginx
    ports:
      - "8000:80"
     volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nodejs:
    image: node:alpine
    environment: 
      NODE_ENV: production
      VIRTUAL_ENV: localhost
      VIRTUAL_PORT: 8080
    working_dir: /home/app
    restart: always
    volumes:
      - ../nodejs:/home/app
    command: ["node", "index.js"]

Nginx将在缩放时自动更新。请注意应用程序服务中的虚拟_ENV ENV var。该变量将从nginx读取。您不需要任何进一步的配置。(None.conf文件)

 类似资料:
  • 问题内容: 我目前在公司中使用Docker-Compose运行开发堆栈,以向开发人员提供他们编写我们的应用程序所需的一切。 它尤其包括: 一个Gitlab容器(sameersbn / gitlab),用于管理私有GIT存储库, 一个用于构建和持续集成的Jenkins容器(library / jenkins), 一个Archiva容器(ninjaben / archiva-docker)管理Mave

  • 我需要一些nginx负载平衡方面的帮助。我有一个docker实例,它服务于一个静态网页,它有两个容器,比如说192.168。1.1:8081 - 当我输入这些IP地址192.168.1.1时,这些IP必须服务于我的两个站点之间的负载。 在我的Nginx中,我必须为此设置两个文件 Nginx。conf,在这些文件中,我必须包含我的默认值。conf文件。违约conf文件包含以下信息。 当我键入192.

  • 问题内容: 我有以下内容: 执行并运行后,我得到以下信息: 到目前为止,一切似乎都很好。 在我使用如下所示: 所有这些实际上应该做的是: 如果我输入,则容器将转发请求。 如果我输入,则容器将转发请求。 如果我输入,则容器将转发请求。 现在,如果尝试任何操作,我都会得到帮助。 问题答案: 我能够找出解决方案,结果发现它是愚蠢的,没有出现在任何日志中,我很难理解。 以下是更新的文件。 不知道此时是否需

  • 刚刚浏览了这些文档: < Li > http://ActiveMQ . Apache . org/failover-transport-reference . html 那么,是否有可能配置消费者和生产者应用程序来连接和平衡多个代理实例之间的负载(以循环或类似的方式)?

  • 本文向大家介绍Nginx服务器做负载均衡反向代理的超级攻略,包括了Nginx服务器做负载均衡反向代理的超级攻略的使用技巧和注意事项,需要的朋友参考一下 nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字。在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数。 例如: 默认请求下,使用 round-robi

  • 我正在尝试在我的应用程序中使用AWS应用程序负载平衡器,其中包含WAF支持。同时,我还需要对反向代理的支持。AWS应用程序负载平衡器是否处理反向代理?