首页 > 解决方案 > nginx 负载均衡器 - Docker 撰写

问题描述

我有一个简单的烧瓶应用程序在容器内的端口 5000 上运行,我正在尝试添加 nginx 负载平衡来扩展应用程序(3 个实例)

这是我的docker-compose文件:

version: "3.7"

services: 
    chat-server:
        image: chat-server
        build: 
            context: .
            dockerfile: Dockerfile
        volumes: 
            - './chat_history:/src/app/chat_history'
        networks: 
            - "chat_net"

    ngnix-server:
        image: nginx:1.13
        ports: 
            - "8080:80"
        volumes: 
            - './ngnix.conf:/etc/ngnix/nginx.conf'
        networks: 
            - "chat_net"
        depends_on: 
            - chat-server

networks: 
    chat_net:

这是我的nginx.conf文件:

events { worker_connections 1024;}

http {
    upstream app {
        server chat-server_1:5000;
        server chat-server_2:5000;
        server chat-server_3:5000;

    }
}

server {
    listen 80;
    location / {
        proxy_pass http://app;
    }
}

两个服务都在同一个chat_net网络上,但是当我点击localhost:8080浏览器时,我得到了 nginx 默认页面,这是为什么呢?我错过了什么?

标签: dockernginxdocker-compose

解决方案


您有一个错字,并且没有nginx.conf正确安装在您的文件中。

您在卷部分的几个地方拼写它ngnix,容器使用默认配置运行(因此是默认主页)。

一旦你解决了这个问题,你可能会遇到@Federkun 提到的错误(nginx将无法解析你代理的 3 个域名)。

您的server指令也放在错误的位置(它需要在该http部分内)。

这应该是文件的修改版本:

events { worker_connections 1024;}

http {
    upstream app {
        server chat-server:5000;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://app;
        }
    }
}

请注意,这比需要nginx了解副本数要好。您可以随时运行docker-compose up--scale chat-server=N调整大小,方法是使用不同的命令运行相同的命令,N而无需停机。


推荐阅读