url-rewriting - haproxy 重写以完全替换主机名并默认重定向基本 url 到登录
问题描述
用例:需要为白标服务创建虚主机名。需要重写 URL,以便一切正常工作,只是新的 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 下访问他们的租户。
到目前为止,我一直在查看许多不同的堆栈溢出以找到执行此操作的方法,这有点困难。
使用下面列出的不同测试进行配置:了解这些无法正常工作......只是将它们留在身边以展示我到目前为止的工作。
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
推荐阅读
- javascript - 从 vuex 存储操作中传递对象
- ios - 如何在本机反应中获取更新的设备令牌?
- javascript - Javascript AJAX 未执行
- python - Cv2 说“找到相机”,即使它没有
- haskell - GHCI:测试套件的 ghc-options 覆盖库的 ghc-options
- python - 如何在 python Dataframe 中提高以下代码的性能,如果可能,请提及复杂性的顺序:
- android - 如何在 android 中使用 2 spinner 进行 fpersonal orm?
- javascript - 如何修复来自多个复选框的请求输入字母字符?
- javascript - 使用具有不同标签的 Objetcs 中的数组对数组进行求和
- javascript - 当前使用 Laravel 和 Stripe Checkout 进行单次付款的方法是什么?