gpt4 book ai didi

varnish - 升级 Varnish 配置。 vcl_hit 中的 obj.ttl 和 beresp.ttl 不起作用

转载 作者:行者123 更新时间:2023-12-04 05:18:23 30 4
gpt4 key购买 nike

我一直在关注有关设置 haproxy 和 varnish 的教程。 ( Link ) 但是,该教程是几年前编写的。我一直在尝试更改 V3 varnish 配置,并在这部分遇到了问题:

sub vcl_hit {
# Purge
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}

return (deliver);
}

set obj.ttl = 0s; 已过时。启动服务时出现此错误:

Stopping Varnish Cache:                                    [FAILED]
Starting Varnish Cache: Error:

Variable 'obj.ttl' is read only.
At: ('input' Line 46 Pos 21)

有人说应该使用 beresp.ttl 来代替,但方法 vcl_hit 不支持它:

Message from VCC-compiler:
'beresp.ttl': cannot be set in method 'vcl_hit'.
At: ('input' Line 95 Pos 21)
set beresp.ttl = 0s;

--------------------##########-------

Running VCC-compiler failed, exited with 2
VCL compilation failed

有人可以提出解决方案吗?

这是我迄今为止在 Varnish 配置中所做的更改:

vcl 4.0;
backend apache2_static {
.host = "127.0.0.1";
.port = "3001";
.connect_timeout = 3s;
.first_byte_timeout = 10s;
.between_bytes_timeout = 5s;
.probe = {
.url = "/haproxycheck";
.expected_response = 200;
.timeout = 1s;
.interval = 3s;
.window = 2;
.threshold = 2;
.initial = 2;
}
}

acl purge {
"localhost";
}

sub vcl_recv {
### Default options

# Health Checking
if (req.url == "/varnishcheck") {
return (synth(751, "health check OK!"));
}

# Set default backend
set req.backend_hint = apache2_static;

# grace period (stale content delivery while revalidating)
#
# This is now handled in vcl_hit.
#
# set req.grace = 30s;

# Purge request
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return (synth(405, "Not allowed."));
}
return (hash);
}

# Accept-Encoding header clean-up
if (req.http.Accept-Encoding) {
# use gzip when possible, otherwise use deflate
if (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
# unknown algorithm, remove accept-encoding header
unset req.http.Accept-Encoding;
}

# Microsoft Internet Explorer 6 is well know to be buggy with compression and css / js
if (req.url ~ ".(css|js)" && req.http.User-Agent ~ "MSIE 6") {
unset req.http.Accept-Encoding;
}
}

### Per host/application configuration
# apache2_static
# Stale content delivery
# Cookie ignored in these static pages
unset req.http.cookie;

### Common options
# Static objects are first looked up in the cache
if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
return (hash);
}

# if we arrive here, we look for the object in the cache
return (hash);
}

sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return (lookup);
}

sub vcl_hit {
# Purge
if (req.method == "PURGE") {
set obj.ttl = 0s;
return (synth(200, "Purged."));
}

return (deliver);
}

sub vcl_miss {
# Purge
if (req.method == "PURGE") {
return (synth(404, "Not in cache."));
}

return (fetch);
}

sub vcl_backend_response {
# Stale content delivery
set beresp.grace = 1d;

# Hide Server information
unset beresp.http.Server;

# Store compressed objects in memory
# They would be uncompressed on the fly by Varnish if the client doesn't support compression
if (beresp.http.content-type ~ "(text|application)") {
set beresp.do_gzip = true;
}

# remove any cookie on static or pseudo-static objects
unset beresp.http.set-cookie;

return (deliver);
}

sub vcl_deliver {
unset resp.http.via;
unset resp.http.x-varnish;

# could be useful to know if the object was in cache or not
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}

return (deliver);
}

sub vcl_backend_error {
# Health check
if (beresp.status == 751) {
set beresp.status = 200;
return (deliver);
}
}

sub vcl_synth {
# Health check
if (resp.status == 751) {
set resp.status = 200;
return (deliver);
}
}

最佳答案

“清除部分”只能位于 vcl_recv 中,并从 vcl_hitvcl_miss 中删除。

您还必须在vcl_recv中更改它。

sub vcl_recv {
### Default options

# Health Checking
if (req.url == "/varnishcheck") {
return (synth(751, "health check OK!"));
}

# Set default backend
set req.backend_hint = apache2_static;

# grace period (stale content delivery while revalidating)
#
# This is now handled in vcl_hit.
#
# set req.grace = 30s;

# Purge request
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return (synth(405, "Not allowed."));
}
return (purge);
}

# Accept-Encoding header clean-up
if (req.http.Accept-Encoding) {
# use gzip when possible, otherwise use deflate
if (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
# unknown algorithm, remove accept-encoding header
unset req.http.Accept-Encoding;
}

# Microsoft Internet Explorer 6 is well know to be buggy with compression and css / js
if (req.url ~ ".(css|js)" && req.http.User-Agent ~ "MSIE 6") {
unset req.http.Accept-Encoding;
}
}

### Per host/application configuration
# apache2_static
# Stale content delivery
# Cookie ignored in these static pages
unset req.http.cookie;

### Common options
# Static objects are first looked up in the cache
if (req.url ~ "\.(gif|jpg|jpeg|swf|css|js|flv|mp3|mp4|pdf|ico|png)(\?.*|)$") {
return (hash);
}

# if we arrive here, we look for the object in the cache
return (hash);
}

vcl_hit 方法

sub vcl_hit {
return (deliver);
}

vcl_miss 方法

sub vcl_miss {
return (fetch);
}

关于varnish - 升级 Varnish 配置。 vcl_hit 中的 obj.ttl 和 beresp.ttl 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34280543/

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