我试图模块化我在Angular-JS中的前端,我们正在使用HA-proxy作为负载均衡器和K8s。
HA-proxy配置中的每个ACL都附加到K8中的不同服务,因为我们使用Angular和(启用了hash-bang),在HA代理配置文件中我们使用它作为识别不同的模块。
以下是我在HA-proxy中的配置失败,因为即使遵循HA Documentation,我也无法转义文件中的#。
acl login-frontend path_beg /\#/login
use_backend login-frontend if login-frontend
acl elc-frontend path_beg /\#/elc
use_backend elc-frontend if elc-frontend
我已尝试将其转义为/%23 / login和/'#' / admin但未成功。
任何想法都将不胜感激。
答案 0 :(得分:0)
#
字符)
与任何URI一样,使用片段标识符组件则不然 意味着将发生检索行动。带有片段的URI 标识符可以用于指代没有任何的辅助资源 意味着主要资源是可访问的或将来的 访问。
并且它在客户端使用,因此客户端(浏览器,curl,...)不会发送请求。作为参考:Is the URL fragment identifier sent to the server?
所以没有必要用它来路由/ acl。 haproxy为此提供转义序列的原因是您可能希望将其包含在主体,自定义标题中......但同样,您不会从请求行(带URI的第一行)获取该部分。
答案 1 :(得分:0)
这里真正发生的是用户从HAProxy /
请求,然后Angular在用户的浏览器中解析#/logic
和#/elc
部分,以决定下一步要做什么。
我的Ember应用遇到了类似的问题。出于搜索引擎优化的目的,我将“营销”页面和“应用”页面分开。
然后,我将我的Ember应用程序安装在/app
上,并使HAProxy将请求路由到为我的Ember应用程序提供服务的backend
。对于“其他”(即/contact-us
)的请求已路由到处理营销页面的backend
。
/app/* -> server1 (Ember pages)
/ -> server2 (static marketing pages)
由于我在网上徘徊着一些仍然指向/#/login
之类的网址,但实际上现在应该是/app/#/login
了,我要做的就是编辑index.html
由我的营销后端提供服务的页面,并将Javascript添加到解析了该网址的页面。如果它检测到/#/login
,则会强制重定向到/app/#/login
。
我希望这可以帮助您弄清楚如何为Angular应用实现相同的功能。