我在 pfSense Haproxy 后面有两台服务器,我需要确保用户根据 url 的一部分登陆同一台服务器。
http://mydomain/<location>/..../....
就我而言,始终是域名后的第一个斜杠,因此所有具有相同域名的用户都应该在同一台服务器上。
有什么建议么?
答案1
没有原生的方法可以做到这一点,但稍加调整就可以使其工作。
您需要提取前端所需的 URL 路径组件,并将其放置在一次性标头中,然后后端将使用该标头来选择服务器。
你的前端看起来有点像这样:
frontend fe_pfsense
...
http-request set-header X-Location-Path %[capture.req.uri]
http-request replace-header X-Location-Path ([^/]+)/.* \1
use_backend be_pfsense
...
首先,我们提取 URI 并将其放在名为 的一次性标头中X-Location-Path
。
然后我们使用正则表达式查找并捕获第一个路径组件,并将其覆盖到相同的标头中。
你的后端看起来会像这样:
backend be_pfsense
...
balance hdr(X-Location-Path)
...
我们使用hdr()
平衡根据我们在前端提取的路径算法来平衡。
或者,我认为您可以在使用以下任一行将标头发送到服务器之前将其删除,但您需要对其进行测试以确保事件的顺序按预期工作。
http-request del-header X-Location-Path
reqidel ^X-Location-Path:.*