docker - 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 默认页面,这是为什么呢?我错过了什么?
解决方案
您有一个错字,并且没有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
而无需停机。