HAProxy配置HTTP前端转发至HTTPS后端返回404故障排查
故障根因
- 四层TCP模式仅做流量透传,七层HTTP模式未做请求头改写时,HAProxy转发给Google后端的请求会携带curl自动填充的
Host: localhost:10005请求头。Google服务端基于Host头做虚拟主机路由,匹配不到对应站点时会直接返回默认404响应。 - 原有后端配置未显式指定TLS握手的SNI字段,Google多域名托管场景下,未携带正确SNI的请求也会被导流到默认站点,加剧404问题。
- 日志中出现的
<BADREQ>记录为端口转发链路的偶发探测、残留连接重试产生的异常请求,和本次404故障无关联。
解决方案
注意:四层TCP模式无法修改应用层HTTP请求头,无法解决该问题,必须使用HTTP模式代理
调整后的完整haproxy.cfg配置如下:
global daemon maxconn 15 log stdout format raw local0 defaults mode http balance first option httplog frontend google bind *:10005 # 转发前重写Host头为目标站点域名 http-request set-header Host google.com default_backend google-url backend google-url # 显式指定TLS握手SNI,关闭后端证书校验 server xxx google.com:443 ssl verify none sni str(google.com)
配置重载生效后,执行原测试命令curl --location --request GET 'http://localhost:10005',即可正常收到Google的响应(默认会返回301跳转至www.google.com),404故障消失。
内容的提问来源于stack exchange,提问作者Christophe Blin
相关产品推荐
相关产品推荐

