【nginx】nginx根据域名进行upstream的负载均衡问题
问题
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;
请问如何实现呢
回答
参考使用了map函数之后取的值为空!发现不行,原因是 proxy_set_header
is executed beforeproxy_pass
even if you put it afterproxy_pass
, and before entering load balancing, $upstream_addr is null
解决方案目前只有再做一层代理,参考:
https://stackoverflow.com/que...
1、自己根据需要改源码编译就行
2、中间加一层代理{
upstream 负载到两个server
server1 到dc1.abc.com
server2 到dc2.abc.com
}
个人觉得你这个毫无意义
以上是 【nginx】nginx根据域名进行upstream的负载均衡问题 的全部内容, 来源链接: utcz.com/a/86342.html