![通配符 DNS 的 NGINX 负载平衡不起作用](https://linux22.com/image/1591330/%E9%80%9A%E9%85%8D%E7%AC%A6%20DNS%20%E7%9A%84%20NGINX%20%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我正在尝试使用 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。