HAProxy - 浏览器和 Curl 报告不一致的结果
HAProxy - Browser and Curl Reporting inconsistent results
环境:
- HAProxy 版本:1.5.18
- 2 台 HAProxy 服务器 w/heartbeat 在中间
我正在尝试设置一个 FE/BE 来支持:
来自一个 domain/uri 的连接被转发到指定端口上的另一个域(均为内部域)(所有后端应用程序都通过 SSL 并直接向它们工作):
- sub1.domain-a.com/test1 -> newsub1.domain-b.com:30000
- sub2.domain-a.com/test2 -> newsub2.domain-b.com:20000
- ...
备注:
- 如果我直接访问网站(不是通过 HAProxy (newsub1.domain-b.com:30000)),Web 应用程序会按预期运行
为了尝试这样做,这是我的配置:
haproxy.cfg(相关章节):
frontend f5
bind *:443 ssl crt /etc/haproxy/c-and-k.pem
mode http
acl path_spgen path_beg -i /spgen
use_backend be_spgen if path_spgen
## Rewrite the sending path to strip off 'spgen'
reqrep ^([^\ :]*)\ /spgen/(.*) \ / if path_spgen
backend be_spgen
mode http
## Attempt to fix sporadic 'This combination of host and port requires TLS' -- not working
option httpchk HEAD / HTTP/1.1\r\nHost:\ test1.domain-b.com
balance source
server test1 test1.domain-b.com:30000 check ssl ca-file /etc/haproxy/ca.pem
当我尝试 curl 或浏览器到 https://sub1.domain-a.com/spgen 时,我最终得到 2 个错误中的 1 个:
- HTTP 状态 404 - 未找到 - 在这种情况下,我正在访问后端服务器,但配置没有像我想要的那样剥离“/spgen”
- 错误请求\n 这种主机和端口组合需要 TLS。
如果我只是重新运行 curl 或刷新浏览器,我可以让它在足够多的错误之间切换 refreshes/re-runs。两个代理都是 运行ning 相同的配置(并且服务已多次重新启动以确保它已加载)。
所以我的问题有两个方面:
- 任何人都可以确定我的 reqrep 中有什么问题,它继续将路径 (/spgen) 传递到后端应用程序吗?
- 谁能解释为什么我偶尔会收到 'Bad Request' 错误?
TIA!
你的代码对我有用并且去掉了 /spgen/。您的 reqrep
规则指定它将删除带有尾部斜杠的 /spgen/,因此它不适用于没有尾部斜杠的 /spgen。
为了测试,我设置了一个 Docker Compose 环境,其中 HAProxy 作为负载平衡器,jmalloc/echo-server 作为 Web 服务器。 echo-server显示HTTP请求报文,方便查看详情
环境:
- HAProxy 版本:1.5.18
- 2 台 HAProxy 服务器 w/heartbeat 在中间
我正在尝试设置一个 FE/BE 来支持:
来自一个 domain/uri 的连接被转发到指定端口上的另一个域(均为内部域)(所有后端应用程序都通过 SSL 并直接向它们工作):
- sub1.domain-a.com/test1 -> newsub1.domain-b.com:30000
- sub2.domain-a.com/test2 -> newsub2.domain-b.com:20000
- ...
备注:
- 如果我直接访问网站(不是通过 HAProxy (newsub1.domain-b.com:30000)),Web 应用程序会按预期运行
为了尝试这样做,这是我的配置:
haproxy.cfg(相关章节):
frontend f5
bind *:443 ssl crt /etc/haproxy/c-and-k.pem
mode http
acl path_spgen path_beg -i /spgen
use_backend be_spgen if path_spgen
## Rewrite the sending path to strip off 'spgen'
reqrep ^([^\ :]*)\ /spgen/(.*) \ / if path_spgen
backend be_spgen
mode http
## Attempt to fix sporadic 'This combination of host and port requires TLS' -- not working
option httpchk HEAD / HTTP/1.1\r\nHost:\ test1.domain-b.com
balance source
server test1 test1.domain-b.com:30000 check ssl ca-file /etc/haproxy/ca.pem
当我尝试 curl 或浏览器到 https://sub1.domain-a.com/spgen 时,我最终得到 2 个错误中的 1 个:
- HTTP 状态 404 - 未找到 - 在这种情况下,我正在访问后端服务器,但配置没有像我想要的那样剥离“/spgen”
- 错误请求\n 这种主机和端口组合需要 TLS。
如果我只是重新运行 curl 或刷新浏览器,我可以让它在足够多的错误之间切换 refreshes/re-runs。两个代理都是 运行ning 相同的配置(并且服务已多次重新启动以确保它已加载)。
所以我的问题有两个方面:
- 任何人都可以确定我的 reqrep 中有什么问题,它继续将路径 (/spgen) 传递到后端应用程序吗?
- 谁能解释为什么我偶尔会收到 'Bad Request' 错误?
TIA!
你的代码对我有用并且去掉了 /spgen/。您的 reqrep
规则指定它将删除带有尾部斜杠的 /spgen/,因此它不适用于没有尾部斜杠的 /spgen。
为了测试,我设置了一个 Docker Compose 环境,其中 HAProxy 作为负载平衡器,jmalloc/echo-server 作为 Web 服务器。 echo-server显示HTTP请求报文,方便查看详情