作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在关注有关设置 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_hit
和 vcl_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/
我正在尝试将旧的Varnish配置导入到版本4.0。 sub vcl_hit { if (req.method == "PURGE") { set beresp.ttl
我一直在关注有关设置 haproxy 和 varnish 的教程。 ( Link ) 但是,该教程是几年前编写的。我一直在尝试更改 V3 varnish 配置,并在这部分遇到了问题: sub vcl_
我是一名优秀的程序员,十分优秀!