gpt4 book ai didi

varnish - 在Varnish 4中 'synthetic'设置了哪个变量?

转载 作者:行者123 更新时间:2023-12-03 17:47:27 26 4
gpt4 key购买 nike

在vcl_synth中,我正在尝试修改错误页面。我可以将其移至vcl_backend_error,但这是没有问题的,因为问题仍然存在。我正在使用CentOS 7,因此只能访问4.0,而不能访问4.1。这很重要,因为std.file_exists仅存在于> = 4.1中。使用来自不受信任,未经测试的来源的破坏前向/向后兼容性的软件包是 Not Acceptable 。

为了处理503.html文件可能不存在的问题,我想测试合成输出,如果为null/empty则生成一个后备错误页面。为了调试,我将所有输出都扔到syslog中。以目前的形式,这将不会持续到生产中。

样本:

sub vcl_synth {
if (resp.status == 503) {
set resp.http.Content-Type = "text/html; charset=utf-8";
synthetic(std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html"));
std.syslog(3, "resp.http.body: " + resp.http.body);
return (deliver);
}
}

通过上面的内容,我清楚地看到resp.http.body为空,但是该页面已返回并在我的浏览器中呈现。那么,如果可以,那么综合设置哪个变量?而且,可以测试吗?
# journalctl -f
...
Sep 08 02:17:17 REDACTED_HOSTNAME varnishd[32498]: resp.http.body:

halp

最佳答案

synthetic(...)期间执行vcl_synth不会填充resp.http.body。那只是一个随机的标题名称。一种可能的方法是在响应主体中填充“临时变量”:

sub vcl_synth {
if (resp.status == 503) {
set resp.http.Content-Type = "text/html; charset=utf-8";
set req.http.X-Synth-Body = std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html");
synthetic(req.http.X-Synth-Body);
std.syslog(3, "req.http.X-Synth-Body: " + req.http.X-Synth-Body);
return (deliver);
}
}

关于varnish - 在Varnish 4中 'synthetic'设置了哪个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46107748/

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