HAProxy URL重写404错误


9

当第一个丢失文件时,如何使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,但我想找点更好的方法。


后端应用程序服务器使用什么应用程序堆栈?
jeffatrackaid

Answers:


1

HAProxy的后端上升或下降(或上升/下降)。

有多种方法可以检查后端的运行状况,但我不知道有任何方法可以提供基于每个请求的跟踪。一旦请求失败,该后端将被标记为已关闭或正在失败(正在被视为已关闭)。

这与您的Nginx设置(按每个请求路由请求)的逻辑完全不同。

我在这里看到几个选择:

  • Nginx作为缓存代理
  • 使用Apps服务器获取静态内容
  • 使用CDN

缓存代理

在HAProxy中,您将使用ACL将静态内容请求路由到特定的后端。这些后端节点将通过缓存代理运行nginx。如果nginx缓存了文件,它将直接为它服务。如果没有,它将调用您的后端。

使用App Server获取静态内容

如果您的应用服务器能够有效地提供静态内容,则可能无需在haproxy中拆分请求。只需将所有请求发送到您的应用程序后端。在其中构建逻辑以提供静态内容(如果可用),如果没有,则将请求发送到后端。

CDN选项

如果您可以将专用域用于静态内容,则可以使用CDN。在CDN,您只需将源URL指向您的应用程序节点。然后,您可以在CDN级别上控制缓存。这类似于上面的Nginx缓存,除了CDN提供程序正在为您处理它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.