Nginx:使用正则表达式的上游服务器指令

Nginx:使用正则表达式的上游服务器指令

我有一个基于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 秒值增加。

相关内容