Url rewriting haproxy重写以完全替换主机名,并在默认情况下将基本url重定向到登录
用例: 需要为白标服务创建虚拟主机名。需要重写的网址,使一切正常工作只是新的网址。我想先让用户登录到特定的子租户,然后一旦登录就可以继续正常使用 例如: 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访问他们的租户 我一直在查看许多不同的堆栈溢出,以找到实现这一点的方法,到目前为止,这有点困难 配置以下列出的不同测试: 了解到这些都不起作用。。。只是让他们留下来展示我目前的工作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
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