当使用 NGINX 作为负载均衡器时,如何传递客户端请求的主机?

当使用 NGINX 作为负载均衡器时,如何传递客户端请求的主机?

我有一个 NGINX 配置:

upstream djangobackend {
  server svr1.int.example.com:80;
  server svr2.int.example.com:80;
  server svr3.int.example.com:80;
}

server {
  location / {
    proxy_pass http://djangobackend;
  }
}

我的问题是,NGINX 在向上游 svrX 机器发出请求时似乎将 HOSTNAME 重写为“djangobackend”。

这是一个问题,因为我为同一个网站设置了多个域名(大客户使用子域名)。因此,我请求http://customer42.example.com/index.htmlsvrX 查看http://djangobackend/index.html,但不知道如何为 customer42 自定义页面。

我可以使用每个子域一个 NGINX 虚拟服务器来解决这个问题(每个虚拟服务器使用不同的上游名称),但这不能扩展到超过六个客户。

我怎样才能解决这个问题?

答案1

在文档中找到了答案:http://wiki.nginx.org/HttpProxyModule

我只需要添加这一行:

proxy_set_header Host $host;

相关内容