【问题标题】:haproxy rewrite uri keep backend header hosthaproxy 重写 uri 保留后端标头主机
【发布时间】:2023-07-13 16:17:01
【问题描述】:

通过在 Haproxy 1.8 中进行重写,我需要将 URI 重定向到另一个域(主机),但在请求中保留标头主机。

例子:

www.mysite.com/api -> 104.4.4.4/api (rw) -> 结果 www.mysite.com/api(响应)

我用HA的一些参数做了很多测试,成功了,但是有一个问题。

这是我的实际场景

backend site1
acl path_to_rw url_beg /api
acl mysite hdr(host) -i www.mymainsite.com

http-request set-header Host www.mymainsite.com if mysite path_to_rw
reqirep ^Host Host:\ host_to_forward/api if mysite path_to_rw
cookie SERVERID insert indirect nocache maxlife 1h
server site1 myhost:80 check cookie site1

我的后端是 IIS 服务器,我的重写工作正常。但是,我得到以下错误:

“HTTP 错误 400。请求主机名无效”

我的后端似乎不接受我发送的 headerhost。有人遇到过这个问题吗?

【问题讨论】:

    标签: http url-rewriting header haproxy host


    【解决方案1】:

    通过 acl 和“使用后端”指令的简单组合,我设法解决了这个问题。

    例如:

    标题主机: www.mysite.com

    另一个来源的应用程序路径 /api

    acl myhost hdr(host) -i www.myhost.com
    acl path_api url_reg -i  /API(.*)
    use_backend be_origin_servers if myhost path_api
    
    backend be_origin_servers
    server myserver1 10.10.10.10 check cookie myserver1
    

    【讨论】: