Url rewriting haproxy重写以完全替换主机名,并在默认情况下将基本url重定向到登录

Url rewriting haproxy重写以完全替换主机名,并在默认情况下将基本url重定向到登录,url-rewriting,haproxy,Url Rewriting,Haproxy,用例: 需要为白标服务创建虚拟主机名。需要重写的网址,使一切正常工作只是新的网址。我想先让用户登录到特定的子租户,然后一旦登录就可以继续正常使用 例如: portal.company1.com-->默认情况下,这是公司1用于登录的主URL。我们创建租户,然后允许他们在没有虚荣url的情况下进入portal.company1.com/login/account/company2,一旦登录应用程序,将/login/account/company2全部删除,并仅利用继续的portal.company1

用例: 需要为白标服务创建虚拟主机名。需要重写的网址,使一切正常工作只是新的网址。我想先让用户登录到特定的子租户,然后一旦登录就可以继续正常使用

例如:

portal.company1.com-->默认情况下,这是公司1用于登录的主URL。我们创建租户,然后允许他们在没有虚荣url的情况下进入portal.company1.com/login/account/company2,一旦登录应用程序,将/login/account/company2全部删除,并仅利用继续的portal.company1.com/

我们希望将lod.company2.com指向我们的haproxy并重写URL,这样它就可以用新的虚荣URL完全替换portal.company1.com,并且他们可以使用新的URL访问他们的租户

我一直在查看许多不同的堆栈溢出,以找到实现这一点的方法,到目前为止,这有点困难

配置以下列出的不同测试: 了解到这些都不起作用。。。只是让他们留下来展示我目前的工作

frontend https_443_frontend
        mode http
        # --- TESTS SO FAR --- ###   
        #http-request replace-value Host portal.company1.com lod.company2.com if { hdr(host) -i lod.company2.com }
        #redirect prefix portal.company1.com code 301 if { hdr(host) -i lod.company2.com }
        #http-request set-header Host lod.company2.com if {hdr(host) -i lod.company2.com }
        #http-request replace-header Host portal.company1.com/login/company2 lod.company2.com if { hdr(host) -i lod.company2.com }
        #redirect prefix https://portal.company1.com code 301 if { hdr(host) -i lod.company2.com }

        acl host_company1_portal_443 hdr(host) -i portal.company1.com
        acl host_lod.company2.com_443 hdr(host) -i lod.company2.com
        use_backend apptier_backend if host_company1_portal_443
        use_backend lod_company2 if host_lod.company2.com_443

backend lod_company2
        mode http
       # option httpclose
       # option forwardfor

        # http-request set-header Host lod.company2.com if { hdr(host) -i portal.company1.com }
        #cookie SERVERID insert indirect nocache
                #########
        #http-request replace-value Host portal.company1.com lod.company2.com if { hdr(host) -i lod.company2.com }

        #redirect prefix portal.company1.com/login/company2 code 301 if { hdr(host) -i lod.company2.com }
        #http-request set-header Host lod.company2.com if {hdr(host) -i lod.company2.com }
        http-request replace-header Host portal.company1.com lod.company2.com if { hdr(host) -i lod.company2.com }
        #redirect prefix https://portal.company1.com/login/company2 code 301 if { hdr(host) -i lod.company2.com }
最终目标:


当用户点击lod.company2.com时,就会进入租户登录。利用该主机名作为重写而不是重定向。目标是屏蔽底层的portal.company1.com,但在后端仍具有所有功能

好吧,在经过几轮的努力之后。。。我们终于找到了一个似乎有效的解决方案

我们在前端需要的一条线

http-request replace-value Location ^portal.company1.com(.*) lod.company2.com\1 if { hdr(host) -i lod.company2.com }
后端需要两行代码

http-request replace-value Location ^https://lod.company2.com(.*)$ https://portal.company1.com\1
http-response replace-value Location ^https://portal.company1.com(.*)$ https://lod.company2.com\1