我正在开发一个项目,我需要将发往特定页面的请求路由到单独的后端。
例如,https://mycooldomain.com的所有请求都将转到后端“A”。但是,如果导航到https://mycooldomain.com/secretpage,我希望它转到后端“B”。
现在,我有这个工作,但遇到一个问题,我需要尾部斜杠才能正常工作。
所以,我需要一种方式来说明请求是否https://[whateverhostnameisused]/secretpage重定向到https://[whateverhostnameisused]/secretpage/。
以下是我的配置示例:
frontend f_https
bind *:443 ssl crt cert.pem
reqadd X-Forwarded-Proto:\ https
#define hosts
acl host_a hdr(host) -i a.mycooldomain.com
acl host_b hdr(host) -i b.mycooldomain.com
acl host_c hdr(host) -i c.mycooldomain.com
#custom acls
acl secret path_beg -i /secretpage
#Custom redirects
##define backend
use_backend b_secret if secret
use_backend b_a if host_a
use_backend b_b if host_b
use_backend b_c if host_c
default_backend b_https
backend b_secret
server secret 192.168.15.15:5575 check
答案 0 :(得分:1)
看来你正在寻找这样的东西:
http-request redirect scheme https drop-query append-slash if { path -m str /secretpage }
如果应用于前端或后端,这应该有效。
http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4.2-redirect%20scheme
仅指定方案是必要的,因为语法需要location | prefix | scheme
之一,而另外两个选项,您必须自己在配置中重新组合URL。
另请注意,reqadd
未正式弃用,但添加该请求标头的首选方法如下:
http-request set-header X-Forwarded-Proto https
请注意,未指定:
,并且不得使用\
转义标题名称后面的空格。这实现了相同的结果,但它在HAProxy中使用了不同的代码路径,并且应该是更有效的操作。您可能希望尽可能使用http-request
和http-response
指令代替reqxxx
和rspxxx
,因为它们也更适合更复杂的操作。