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

时间:2018-06-04 19:30:49

标签: haproxy

我的情况是,我从一个后端服务器提供网站的一部分(某些网址路径),而所有其他网址都是从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

1 个答案:

答案 0 :(得分: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阶段,缓冲区已被释放,因此正常{{ 1}}前端使用的变量不可用。