繁体   English   中英

如何在 HAProxy 中重写 URL?

[英]How can I rewrite URLs in HAProxy?

使用的HAProxy版本:v2.6.6

我想要实现的是,当用户访问http://haproxyserver.domain.com/application1时,HAProxy 获取位于https://appserver1.otherdomain.com/的页面并将其发送回http://haproxyserver .domain.com/application1

因此,我想将前面的“/application1”改写为后面的“/”,并将响应发送回“/application1”。 例如,后端的图像https://appserver1.otherdomain.com/images/test.jpg应该作为http://haproxyserver.domain.com/application1/images/test.jpg等发回。

我的 haproxy.cfg 文件中没有任何重写配置:

#---------------------------------------------------------------------
# PRD http frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  PRD-http-front
bind \*:80
http-request add-header X-Forwarded-For %\[src\]
http-request add-header X-Forwarded-Proto http

    mode http
    option httplog
    option forwardfor       except 127.0.0.0/8
    maxconn 10240
    
    # define acl's
    acl host_haproxy-stats hdr(host) -i haproxy-stats.domain.com
    
    # decide which backend to use
    # HAProxy statistics page
    use_backend haproxy-stats if host_haproxy-stats
    
    # Other
    use_backend application1 if { path_beg /application1 }
    
    # default backend
    default_backend PRD-local-httpd

#---------------------------------------------------------------------
# haproxy-stats backend
#---------------------------------------------------------------------
backend haproxy-stats
mode http
option httpclose
option forwardfor
http-request add-header X-Forwarded-For %\[src\]
http-request add-header X-Forwarded-Proto http
server haproxy-stats 127.0.0.1:8888 check

#---------------------------------------------------------------------
# PRD-local-httpd backend
#---------------------------------------------------------------------
backend PRD-local-httpd
mode http
option httpclose
option forwardfor
http-request add-header X-Forwarded-For %\[src\]
http-request add-header X-Forwarded-Proto http
server HAProxy-Server haproxyserver.domain.com:8081 check

#---------------------------------------------------------------------
# application1 backend
#---------------------------------------------------------------------
backend application1
mode http
option httpclose
option forwardfor
http-request add-header X-Forwarded-For %\[src\]
http-request add-header X-Forwarded-Proto http
server appserver1 appserver1.otherdomain.com:443 check ssl verify none

此配置不起作用,因为 HAProxy 将尝试在后端加载https://appserver1.otherdomain.com/application1 ,该地址不存在。 我已经在后端配置部分尝试了几个重写设置但没有成功。 一些例子:

http-request replace-path ^([^\ ])\ /application1/(.) \1\ /\2
http-request replace-path /application1(.*) / \1

我什至在前端试过这个:

acl app1 path_beg -i /application1/
http-request set-path  /%[path] if app1

我尝试了很多东西,但我无法弄清楚。 非常感谢您的帮助!

在您的backend application1添加主机重写: http-request set-header host appserver1.otherdomain.com和路径重写,就像您在问题中所做的那样。 我不确定您是否需要重写任何内容作为响应,但如果您这样做,那么它将与请求中的相同,只需使用http-response即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM