nginx根据域名进行upstream的负载均衡问题

发布于 2022-09-12 00:41:44 字数 1712 浏览 16 评论 0

问题

nginx通过域名反向代理负载到两个数据中心的服务上:

1、设置HOST为proxy_set_header Host $proxy_host;时,proxy_pass只能写单数据中心的域名,不能写upstream形式(实测写到upstream里会报错404,HOST好像无法传递到upstream里),无法满足多中心负载。

server {  
        listen       80;  
        server_name  www.xyz.com;        
        location / {  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header Host $proxy_host;  
            proxy_pass http://dc1.abc.com;   
        }  
}

或=================》

server {  
        listen       80;  
        server_name  www.xyz.com;        
        location / {  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header Host $proxy_host;  
            proxy_pass http://dc2.abc.com;   
        }  
}

2、期望是以下配置可以正常访问:

upstream pp{  
            server  dc1.abc.com;  
            server  dc2.abc.com;  
    }  
server {  
        listen       80;  
        server_name  www.xyz.com;        
        location / {  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header Host $proxy_host;  
            proxy_pass http://pp;   
        }  
}

疑问?

nginx upstream可以根据域名进行负载均衡吗?设置了Host $proxy_host只能满足非upstream访问
请教如何把$proxy_host 传递到upstream里,然后根据upstream配置的不同的server设置不同的HOST?

比如:www.xyz.com转发到upstream里的dc1.abc.com时,传递header的HOST为dc1.abc.com;
www.xyz.com转发到upstream里的dc2.abc.com时,传递header的HOST为dc2.abc.com;
请问如何实现呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

格子衫的從容 2022-09-19 00:41:44

参考使用了map函数之后取的值为空!发现不行,原因是 proxy_set_headeris executed beforeproxy_passeven if you put it afterproxy_pass, and before entering load balancing, $upstream_addr is null

image.png

解决方案目前只有再做一层代理,参考:
https://stackoverflow.com/que...

黒涩兲箜 2022-09-19 00:41:44

1、自己根据需要改源码编译就行

2、中间加一层代理{
upstream 负载到两个server
server1 到dc1.abc.com
server2 到dc2.abc.com
}

个人觉得你这个毫无意义

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文