HAProxy - 如果第一台机器人返回404,则从第二台机器提供URL

问题描述 投票:1回答:1

我有一种情况,我从一个后端服务器提供网站的一部分(某些URL路径),而所有其他URL都是从HAProxy中的不同默认后端提供的。

现在,由于编写应用程序逻辑的方式,可以在两个物理服务器计算机中的任何一个上的相同路径上创建在相同URL路径下提供的文件。我希望能够提供这些文件,无论文件存在于哪台机器上。简而言之,如何将请求转发到一个后端,如果响应是404(该文件不存在),请转发请求从另一个后端提供?

我是HAProxy的完整菜鸟所以任何帮助将不胜感激。谢谢。

我的haproxy.conf的相关部分:

frontend frontend0 ... acl de path_beg /path1 acl de path_beg /path2 acl de path_beg /path3 use backend backend1 if de default_backend bakend backend backend1 ... server server_name 127.0.0.1:8000 backend backend2 ... server server_name 192.168.11.1:8000

根据文件的存在位置,需要从这两台机器提供路径/path4

haproxy
1个回答
0
投票

感谢@ Michael-sqlbot关于ServerFault上的提示和this问题的答案大纲。我最终使用的设置如下:

  • 我设置了一个单独的URL / _path4,它是从一个后端提供的,而原始的URL / path4是从另一个后端提供的。
  • 在从/ path4的第一个后端收到404响应后,我重定向到URL / _path4

我的配置文件现在看起来如下:

frontend frontend0 ... acl de path_beg /path1 acl de path_beg /path2 acl de path_beg /path3 acl de path_beg /_path4 use_backend backend2 if de default_backend backend1 ... backend backend1 ... http-request set-var(txn.path) path server server_name 127.0.0.1:8000 http-response redirect location %[var(txn.path),regsub('^/path4','/_path4')] code 303 if { status 404 } { var(txn.path) -m beg '/path4' } ... backend backend2 ... server server_name 192.168.11.1:8000

正如在@ Michael-sqlbot对链接问题的优秀评论中所解释的那样,事务变量的设置是必需的,因为在http-response阶段,缓冲区已被释放,因此前端中使用的正常path变量不可用。

© www.soinside.com 2019 - 2024. All rights reserved.