gpt4 book ai didi

http - 如果 Varnish 从主服务器收到 404 请求,是否可以将 Varnish 配置为尝试使用第二台服务器获取某些资源?

转载 作者:可可西里 更新时间:2023-11-01 15:21:09 25 4
gpt4 key购买 nike

这对我来说是一个完美的解决方案,因为我需要为网络浏览器提供一些生成的内容。我的计划是按需生成内容并存储起来以备下次使用。我不希望浏览器每次都调用我的服务(生成内容)。如果可用,我希望他们直接转到“缓存”资源,如果不可用,则只调用该服务。所以我将 Varinsh 放在运行服务的服务器 A 和存储先前生成的内容版本的服务器 B 的前面。如果它收到对尚未缓存的资源的请求,它将尝试服务器 B。收到 404 响应后,它将从服务器 A 请求相同的资源。

Varnish可以用VCL这样配置吗?如果没有,是否有您知道的解决方案?

附言我不想向浏览器发送 302 重定向,而且我无法控制服务器 B 以使其发送此类重定向而不是 404

最佳答案

这在 Varnish 中是完全可能的。确保在 vcl_fetch 中(也可能在 vcl_error 中)检查返回状态代码(例如检查状态 > 400),如果失败则重新启动,如果 req.restarts > 0,则在 vcl_recv 中选择另一个后端。例如:

backend serverA {
.host="192.168.0.1";
.port = "80";
}

backend serverB {
.host = "192.168.0.2";
.port = "80";
}

sub vcl_recv {
if (req.restarts == 0) {
set req.backend = serverB;
} else {
set req.backend = serverA;
}
}

sub vcl_fetch {
if (obj.status >= 400 && req.restarts == 0) {
restart;
}
}

sub vcl_error {
if (req.restarts == 0) {
restart;
}
}

但话虽这么说,听起来您正在重新发明缓存服务器的概念。 Varnish 是很棒的缓存服务器。为什么不拥有一台后端服务器 (serverA) 并让 Varnish 缓存您生成的实体?您可以设置复杂的规则,您将免费获得(缓存的)过期、清除管理和性能! :)

关于http - 如果 Varnish 从主服务器收到 404 请求,是否可以将 Varnish 配置为尝试使用第二台服务器获取某些资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4327874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com