首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对404错误的HAProxy URL重写

问对404错误的HAProxy URL重写
EN

Server Fault用户
提问于 2015-02-02 09:04:11
回答 1查看 2.2K关注 0票数 8

当第一个文件丢失时,如何使HAProxy重写到另一个后端?我需要的是errorloc,但是进行重写而不是重定向,因此客户端不知道重定向。

我们开发了一个基于NginX的应用程序,它既是负载平衡反向代理,也是用于静态文件的web服务器。应用程序基于Opa框架,它需要基于cookies的粘性会话--由NginX和HAproxy都支持。我们遇到的问题是动态内容生成。它按需生成图像,但生成后会保存在磁盘上,可以通过确定性路径静态访问。

使用NginX很容易解决问题-它尝试读取本地文件并使用负载平衡后端,只有当文件丢失时(尚未生成):

代码语言:javascript
复制
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,它尝试读取静态文件,然后再次使用新的header重写到HAproxy,但我想找到更好的东西。

EN

回答 1

Server Fault用户

发布于 2015-09-10 21:14:30

HAProxy的后端要么是向上的,要么是向下的(或者是在上升/下降的过程中)。

有多种方法来检查后端的健康状况,但我不知道有任何提供基于每个请求的跟踪。一旦请求失败,该后端将被标记为下降或失败(在被考虑下降的过程中)。

这与Nginx设置的逻辑非常不同,Nginx是根据每个请求来路由请求的。

我在这里看到了几种选择:

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

缓存代理

在HAProxy中,您可以使用ACL将静态内容请求路由到特定的后端。这些后端节点将使用缓存代理运行nginx。如果nginx缓存了该文件,它只会为它服务。如果不是,它会调用你的后端。

将应用服务器用于静态内容

如果您的应用服务器高效地提供静态内容,您可能不需要在haproxy中拆分请求。只需将所有请求发送到应用程序后端即可。将逻辑构建到它们中,以便在可用的情况下为静态内容服务,如果没有,则将请求发送到后端。

CDN选项

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

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/664263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档