我有一个基于docker的架构:可配置数量的容器由一个nginx容器进行负载平衡。所有这些容器都存在于同一个本地网络上backend
(由 创建docker-compose
)。
我想要负载平衡的容器将始终在端口 上侦听77894
,并且始终具有以下形式的名称model_*
(其中*
可以是任何正整数)。nginx.conf
单个 nginx 容器中的 需要正确配置。
这nginx.conf
工作正常,但我必须model
在服务中明确指定每个副本upstream
:
http {
upstream models {
server model_1:77894;
server model_2:77894;
server model_3:77894;
}
server {
listen 80;
location / {
proxy_pass http://models;
}
}
}
events { }
这不是动态的;我必须事先知道副本的数量model_*
。
当我尝试这个(和其他变体)时:
upstream {
server ~ ^model_[0-9]:77894
}
nginx 抛出错误:invalid parameter "^model_[0-9]:77894" in /etc/nginx/nginx.conf:4
有什么方法可以告诉 nginx 将反向代理到所有名称类似的容器model_*:77894
?
答案1
该server
指令仅支持显式上游 IP 地址:端口对或 Unix 域套接字路径。
您应该使用配置管理系统,它可以同时更新 nginx 配置文件并设置容器,从而始终保持 nginx 配置同步。
一个选项是添加server
该部分中的所有可能条目upstream
,并让 nginx 检测后端是否可用。如果 nginx 尝试过于频繁地使用不存在的后端,fail_timeout
则可以将值从默认的 10 秒值增加。