找回密码
 立即注册
搜索
查看: 874|回复: 0

[L/WNAMP] nginx根据域名进行upstream的负载均衡问题

  [复制链接]
发表于 2023-2-24 14:34 | 显示全部楼层 |阅读模式

问题

nginx通过域名反向代理负载到两个数据中心的服务上,且后端取到的ip地址为代理的这两个ip地址:

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_headeris executed beforeproxy_passeven if you put it afterproxy_pass, and before entering load balancing, $upstream_addr is null

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2025-5-9 21:02 , Processed in 0.041599 second(s), 12 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表