我感兴趣的是最大限度地提高缓存命中率和速度缓慢变化的站点的效率。虚拟主机没有大量 RAM,但我想使用可用于清漆的内容,但如果没有足够的内存,则回退到磁盘缓存。
是否可以使用单个清漆实例来做到这一点?该文档描述了“文件”和“malloc的”存储为不同的选项。
我正在 AWS 上进行大型部署,该部署具有很高的正常运行时间要求和全天可变负载。显然,这是 ELB(弹性负载均衡器)和自动缩放的完美用例。
但是,我们也依赖 varnish 来缓存 API 调用。我最初的本能是构建堆栈,以便 varnish 使用 ELB 作为后端,进而访问 appGroup。
Varnish -> ELB -> AppServers
但是,根据一个 几个 来源是不可能的,因为ELB不断改变它的DNS主机名,其中在启动清漆缓存,这意味着更改IP不会被清漆拾起的IP地址。
然而,四处阅读,看起来人们正在这样做,所以我想知道存在哪些解决方法?也许是定期重新加载 vcl 的脚本?
在这真的不是一个好主意的情况下,是否有其他解决方案的想法?
如何配置 Varnish,以便对匹配“*.css”的请求的所有响应都在客户端的浏览器中缓存 30 天?
我想要实现的是让 Varnish 设置正确的“Expires:”和/或“Cache-Control”设置,以便所有 CSS:s 都缓存 30 天,而不管后端对这些对象。
情况是:
我正在构建 PHP 应用程序,并且需要 http 缓存。
Varnish 很棒,很多人告诉我 Varnish 将缓存数据存储在 RAM 中。但我希望它缓存在硬盘中。
有什么方法可以将 Varnish 缓存数据存储在硬盘中?
我们计划在我们的生产环境中使用 Varnish Cache 3.0.2(最新版本),但是,对于开发,我们希望在本地计算机上运行 Varnish,我们中的一些人有 Win7。
我只能找到安装它的唯一简单选项是为 Windows 捆绑的旧版本 Varnish (2.1)。
https://www.varnish-cache.org/trac/wiki/VarnishOnCygwinWindows
是否有构建它的选项(如何?)或获取编译版本?
我使用 nginx 作为后端的反向代理。配置非常基本,例如核心只是:
upstream myservice {
server 127.0.0.1:80;
server 123.123.123.123:80;
}
location / {
proxy_pass http://myservice;
proxy_set_header Host myservice;
}
Run Code Online (Sandbox Code Playgroud)
现在我的服务在计算上非常繁重,我希望 nginx 将活动并行(同时)请求的数量限制为单个上游后端,例如 10。
我查看了limit_req模块,但是这个模块似乎只关注每分钟传入的请求。我特别想限制活动后端连接的数量;即考虑请求是否已经返回。这可能吗?
在清漆中,这可以使用例如
backend cpu1 {
.host = "127.0.0.1";
.port = "80";
.max_connections = 20;
}
Run Code Online (Sandbox Code Playgroud)
但是我需要为此使用nginx。
我有一个缓慢的网络应用程序,我在它前面放置了 Varnish。所有页面都是静态的(它们不会因不同的用户而变化),但它们需要每 5 分钟更新一次,以便包含最近的数据。
我有一个简单的脚本 ( wget --mirror
),它每 15 分钟抓取一次整个网站。每次爬行大约需要 5 分钟。爬网的目的是更新 Varnish 缓存中的每个页面,这样用户就不必等待页面生成(因为所有页面都是最近生成的,这要归功于蜘蛛)。
时间线如下所示:
0:00:00 到 0:05:00 之间的请求可能会访问尚未更新的页面,并且将被迫等待几秒钟以等待响应。这是不能接受的。
我想做的是,也许使用一些 VCL 魔法,总是将来自蜘蛛的请求转发到后端,但仍将响应存储在缓存中。这样,用户将永远不必等待页面生成,因为没有 5 分钟的时间窗口,其中部分缓存是空的(可能除了在服务器启动时)。
我怎样才能做到这一点?
如何更改清漆 503 错误?
我该如何自定义它?
我正在使用清漆 v 4
现在开始工作了
sub vcl_synth {
set resp.http.Content-Type = "text/html; charset=utf-8";
set resp.http.Retry-After = "5";
synthetic( {"<!DOCTYPE html>
<html>
<head>
<title>Under Maintenance</title>
</head>
<body>
<h1>Under Maintenance</h1>
<p></p>
<hr>
</body>
</html>
"} );
return (deliver);
}
Run Code Online (Sandbox Code Playgroud) 我是 Varnish 的新手,我在 Debian Wheezy 上运行 v4.0。
我想在 4 周的缓存中设置默认 TTL(非常静态的内容)。
通过阅读文档,我认为答案是default_ttl
在我的 VCL 文件中的某处设置一个选项。我搜索了文档,但只能找到一个参考。
我发现了这个问题,但我认为答案一定是过时的,因为它对我不起作用。
有人可以澄清如何在 Varnish 4.0 中做到这一点吗?
更新:这是我的配置文件(Varnish 4.0 附带的默认文件,除了我将后端指向本地主机):
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_backend_fetch {
set obj.ttl = 4w;
}
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you don't need,
# rewriting the …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Varnish,我不太确定是否还应该删除Server: nginx
HTTP 标头。为什么有人需要知道我正在使用 NGINX?可以从响应中删除这个 HTTP 标头还是在某个地方需要它?从安全的角度来看,这样做可能更好?
varnish ×10
cache ×3
nginx ×2
amazon-elb ×1
apache-2.2 ×1
disk-cache ×1
http ×1
http-headers ×1
performance ×1
windows ×1