当第一个丢失文件时,如何使HAProxy重写到另一个后端?我需要的errorloc
只是重写而不是重定向,因此客户端不知道重定向。
我们开发了一个考虑了NginX的应用程序,该应用程序既平衡了反向代理的负载,又为静态文件提供了Web服务器。应用程序基于Opa框架,该框架需要基于cookie的粘性会话-NginX和HAproxy均支持。我们遇到的应用程序功能是动态内容生成。它按需生成映像,但是生成后将其保存在磁盘上,并且可以使用确定性路径进行静态访问。
使用NginX可以轻松解决问题-仅当文件丢失(尚未生成)时,它才会尝试读取本地文件并使用负载平衡的后端:
server {
server_name wkaliszu.pl;
location /thumb {
root /path_on_disk/to_cached_content;
expires 7d;
# try to access already generated content
try_files $uri @wkaliszu;
}
location / {
# reverse proxy to the application
[...]
}
location @wkaliszu {
# reverse proxy to the application
[...]
}
}
服务器已迁移,现在使用HAPproxy进行负载平衡,它不是Web服务器,不支持此功能。现在,每当客户端尝试访问资源时,都会执行动态软件生成,这会大大降低速度并浪费资源。如果第一个(静态文件的简单缓存Web服务器)由于错误404而失败,那么它可以使用下一个后端就可以了,但是我找不到一种简单的方法。重定向/thumb
到NginX会尝试读取静态文件,然后再次使用新的HTTP标头将其重写为HAproxy,但我想找点更好的方法。