Nginx

Nginx:帶有正則表達式的上游伺服器指令

  • September 15, 2020

我有一個基於 docker 的架構:可配置數量的容器由一個 nginx 容器進行負載平衡。所有這些容器都存在於同一個本地網路上,backend(由 創建docker-compose)。

我想要負載平衡的容器將始終在 port 上偵聽77894,並且始終具有形式的名稱model_*(其中*可以是任何正整數)。單個 nginx 容器中的nginx.conf需要正確配置。

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

server指令僅支持顯式上游 IP 地址:埠對或 Unix 域套接字路徑。

您應該使用配置管理系統,它會同時更新 nginx 配置文件並設置容器,因此始終保持 nginx 配置同步。

一種選擇是server在該部分中添加所有可能的條目,upstream並讓 nginx 檢測後端是否可用。如果 nginx 過於頻繁地嘗試使用不存在的後端,fail_timeout則可以從預設的 10 秒值增加值。

引用自:https://serverfault.com/questions/1034013