gpt4 book ai didi

nginx - 带有粘性 session 的 docker-compose 规模

转载 作者:行者123 更新时间:2023-12-04 23:40:11 27 4
gpt4 key购买 nike

我有一个在生产中需要 websocket 连接的网络服务器。我使用 docker-compose 和 nginx 作为代理来部署它。
所以我的撰写文件如下所示:

version: '2'
services:
app:
restart: always

nginx:
restart: always
ports:
- "80:80"

现在,如果我将“应用程序”服务扩展到多个实例,docker-compose 将执行 循环赛在每次调用内部 dns“应用程序”时。

有没有办法告诉 docker-compose 负载均衡器应用粘性 session ?

另一个解决方案 - 有没有办法使用 nginx 解决它?

我不喜欢的可能解决方案:

应用程序的多种定义
version: '2'
services:
app1:
restart: always

app2:
restart: always

nginx:
restart: always
ports:
- "80:80"

(然后在 nginx 配置文件中,我可以定义 app1 和 app2 之间的粘性 session )。

我从搜索中得到的最佳结果 :
https://github.com/docker/dockercloud-haproxy

但这需要我添加另一个服务(也许替换 nginx?),并且文档中关于粘性 session 的内容非常糟糕。

我希望 docker 只允许在撰写文件中使用简单的行配置它。

谢谢!

最佳答案

看看jwilder/nginx-proxy .此镜像提供了一个 nginx 反向代理,用于监听定义了 VIRTUAL_HOST 的容器。变量并在容器创建和删除时自动更新其配置。 tpcwang的 fork 允许您使用 IP_HASH容器级别的指令以启用粘性 session 。

考虑以下 Compose 文件:

nginx:
image: tpcwang/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
app:
image: tutum/hello-world
environment:
- VIRTUAL_HOST=<your_ip_or_domain_name>
- USE_IP_HASH=1

让我们启动并运行它,然后扩展 app到三种情况:
docker-compose up -d
docker-compose scale app=3

如果您检查 nginx 配置文件,您将看到如下内容:
docker-compose exec nginx cat /etc/nginx/conf.d/default.conf

...
upstream 172.16.102.132 {
ip_hash;
# desktop_app_3
server 172.17.0.7:80;
# desktop_app_2
server 172.17.0.6:80;
# desktop_app_1
server 172.17.0.4:80;
}
server {
server_name 172.16.102.132;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://172.16.102.132;
}
}
nginx容器已自动检测到这三个实例并更新其配置以使用粘性 session 将请求路由到所有实例。

如果我们尝试访问该应用程序,我们可以看到它在每次刷新时总是报告相同的主机名。如果我们删除 USE_IP_HASH环境变量我们会看到主机名实际上发生了变化,也就是说,nginx 代理正在使用循环来平衡我们的请求。

关于nginx - 带有粘性 session 的 docker-compose 规模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39739344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com