HttpClient正确设置Host的姿势(不需要自定义DNS解析类)

本文介绍如何通过设置虚拟主机解决Nginx反向代理中因Host头不同导致的问题,确保请求能正确路由到指定域名,而不受负载均衡的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为有负载均衡的考虑,前端用了nginx反向代理。

两个域名虽然IP相同,但是如果不设置hosts文件,直接通过IP,是会返回404的。

所以需求就是这样,不设置hosts文件,而正确访问到对应的域名。

其实访问的IP是一样的,只是request header的Host不一样。

搜索到的解决方式:http://my.oschina.net/mikewei/blog/88606

这样有些不优雅,有点麻烦,而且我在httpClient3下,没找到对应的类。

只好debug跟踪源代码。

发现method.setRequestHeader("Host","a.xxxx.com")会被覆盖掉。

跟踪源代码发现,是HttpMethodBase类的addHostRequestHeader方法覆盖掉了。


如上,事情就好办了:

method.getParams().setVirtualHost("a.xxxx.com");

就OK了!

根本用不到自己实现一个DNS解析类。




关键代码就一行:getMethod.getParams().setVirtualHost("a.xxxx.com");

通过debug源代码找出的。。。

其实就是只要request header多一个Host:a.xxxx.com就行


补充:

想直接命中某个机器必须这样做。

否则直接用域名的方式,会负载均衡 不知道命中到哪台机器上(IP不同)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值