通配符 DNS 的 NGINX 负载平衡不起作用

通配符 DNS 的 NGINX 负载平衡不起作用

我正在尝试使用 NGINX 作为由 3 个虚拟机组成的 Elastic Cloud Enterprise 平台的负载均衡器。目的是对查询进行负载平衡,例如http://xxxxxxx.ece.dev.org:9200其中 xxxxxx 指的是 Elasticsearch 集群,并且根据 elasticsearch 集群而变化。

我有一个通配符 DNS 记录,它将 *.ece.dev.org 定向到 NGINX IP,例如*.ece.dev.org -> 10.1.2.99

然后在conf文件中,服务器定义为:

upstream ece-proxy{ 
server 10.1.2.3:9200; #these are the servers which host the platform 
server 10.1.2.4:9200; 
server 10.1.2.5:9200; 
} 

server{ 
listen 80; 
server_name *.ece.dev.org; 
location / { 
proxy_pass http://ece-proxy; 
proxy_http_version 1.1; 
proxy_set_header Host $host; 
} 
} 

当我使用上面的 nginx 配置时,URLhttp://xxxxxxxxxx.ece.dev.org:9200无法连接。

如果通配符 DNS 记录直接解析为其中一个云虚拟机(例如 *.ece.dev.org -> 10.1.2.3),则该 URL 能够成功连接。

(直接输入 10.1.2.3:9200 或 10.1.2.4:9200 等不会返回任何内容。必须提供集群 ID)

应如何配置 NGINX 来处理通配符子域以实现负载平衡?

答案1

我们对 server_name 使用以下内容:

server_name ~^(.*)\.ece\.dev\.org$ ;

答案2

我自己没有使用过 NGINIX,但我看到您已经让 NGNIX 服务器监听端口 80。但是,您正在将请求发送到端口 9200。

相关内容