Haproxy配置域名重定向不生效,无需客户端跟随跳转如何实现
问题原因
你当前配置使用的redirect code 301逻辑是给客户端返回301重定向响应,要求客户端主动向新地址发起请求。带-L参数的curl会自动执行重定向跳转所以访问正常,但你的API服务没有配置自动跟随重定向,因此无法正常访问。
调整方案
你需要将重定向逻辑替换为反向代理转发,由HAProxy直接将请求透传到https://sede.example.pub对应的服务,客户端全程无感知,不需要主动跳转。
具体修改步骤
- 新增指向
sede.example.pub的后端服务配置 - 删除原有
redirect跳转规则,替换为匹配域名后使用对应后端的规则 - 配置请求头修改,避免后端服务因Host不匹配返回错误
修改后的配置片段
新增backend配置
在你现有配置的frontend http-in段之后新增如下backend配置:
backend sede_pub_backend mode http # 若sede.example.pub的SSL证书为可信机构颁发,可将verify none改为verify required提高安全性 server sede_pub sede.example.pub:443 ssl verify none # 修改请求头Host为目标域名,保证后端服务能正常识别请求 http-request set-header Host sede.example.pub
调整frontend http-in配置
将frontend http-in段最后两行的原有跳转规则:
acl sede_acl req.hdr(host) -i -m str sede.example.com.br redirect code 301 prefix https://sede.example.pub if sede_acl
替换为:
acl sede_acl req.hdr(host) -i -m str sede.example.com.br use_backend sede_pub_backend if sede_acl
注意事项
- 该配置会透传所有请求信息,包括GET参数、POST请求体、请求头等,完全兼容API的GET/POST请求场景
- 如果需要同时支持旧域名的浏览器跳转和API透传,可额外添加ACL判断客户端类型,针对不同客户端返回不同处理逻辑
- 生产环境建议开启后端SSL证书校验,避免中间人攻击风险
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

