【发布时间】:2017-12-11 02:54:17
【问题描述】:
我尝试在具有相同 nodejs 应用程序的两个容器之间进行 nginx 反向代理负载平衡。
目录结构:
.
+-- docker-compose.yml
+-- nginx
+-- nodejs
| +-- index.js
| +-- …
+-- php
docker-compose.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
index.js 监听端口8080
nginx 配置default.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。
如何使 nginx 服务器在 nodejs 应用程序的两个实例之间实现负载平衡?
有没有更好的方法来做到这一点?
编辑 1
我仍然很想知道如何在没有 jwilder/nginx-proxy 的情况下做到这一点。谢谢
编辑 2
我有一些适合的东西:
default.conf:
upstream nodejs-upstream {
server nodejs_1:8080;
server nodejs_2:8080;
}
这在两个 nodejs 容器启动时有效。当我docker stop nodejs_2 时,该应用程序仍然可用(负载平衡似乎工作),但请求最终可能真的很慢(在 localhost 上最多 1 分钟)。如果我重新启动这个容器,它会再次正常工作......
【问题讨论】:
标签: nginx docker docker-compose