ors*_*har 4 proxy nginx docker docker-compose sticky-session
我有一个网络服务器,需要生产中的websocket连接.我使用docker-compose和nginx作为代理部署它.所以我的撰写文件看起来像这样:
version: '2'
services:
app:
restart: always
nginx:
restart: always
ports:
- "80:80"
Run Code Online (Sandbox Code Playgroud)
现在,如果我将"app"服务扩展到多个实例,docker-compose将在每次调用内部dns"app" 时执行循环.
有没有办法告诉docker-compose负载均衡器应用粘性会话?
另一个解决方案 - 是否有办法使用nginx解决它?
我不喜欢的可能解决方案:
app的多个定义
version: '2'
services:
app1:
restart: always
app2:
restart: always
nginx:
restart: always
ports:
- "80:80"
Run Code Online (Sandbox Code Playgroud)
(然后在nginx配置文件中我可以定义app1和app2之间的粘性会话).
我从搜索中获得的最佳结果:https: //github.com/docker/dockercloud-haproxy
但是这需要我添加另一个服务(可能会替换nginx?),并且文档在那里的粘性会话上相当差.
我希望docker只允许在compose文件中使用简单的行进行配置.
谢谢!
看看jwilder/nginx-proxy.此映像提供了一个nginx反向代理,用于侦听定义VIRTUAL_HOST
变量的容器,并在容器创建和删除时自动更新其配置.tpcwang的fork允许您IP_HASH
在容器级别上使用该指令来启用粘性会话.
考虑以下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
Run Code Online (Sandbox Code Playgroud)
让它启动并运行,然后扩展app
到三个实例:
docker-compose up -d
docker-compose scale app=3
Run Code Online (Sandbox Code Playgroud)
如果你检查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;
}
}
Run Code Online (Sandbox Code Playgroud)
该nginx
容器已经自动检测的三个实例,并已经更新了其将请求路由配置它们都使用粘性会话.
如果我们尝试访问该应用程序,我们可以看到它始终在每次刷新时报告相同的主机名.如果我们删除USE_IP_HASH
环境变量,我们会看到主机名实际发生了变化,也就是说,nginx代理使用循环法来平衡我们的请求.
归档时间: |
|
查看次数: |
2244 次 |
最近记录: |