我的情况是,我从一个后端服务器提供网站的一部分(某些网址路径),而所有其他网址都是从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
。
答案 0 :(得分:0)
感谢@ Michael-sqlbot提供关于ServerFault的提示和this问题的答案大纲。我最终使用的设置如下:
我的配置文件现在如下所示:
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}}前端使用的变量不可用。