- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
由于该站点的性能缓慢,我开始将 info Varnish 视为缓存解决方案,并对 Google Analytics 有一些疑问。
当站点上有5K活跃用户时(根据GA的实时流量报告),后端服务器上的服务器负载飙升至30-40+,乘客队列开始堆积,站点几乎无法使用。我知道需要获得更好性能的缓慢查询和数据库工作,但目前我没有资源来优化查询和数据库架构、索引等,因此正在考虑添加 Varnish 。
我创建了一个图表来更好地显示堆栈,这是当前堆栈的样子:(该站点当前在 CDN 中缓存图像/css/js - Akamai)
我想在后端服务器前端添加两个 varnish 实例来缓存文章,堆栈将如下所示:
该站点是一个新闻站点,我正在寻找有关如何正确处理 cookie 和缓存的建议。对于第一阶段,我想简单地完全排除经过身份验证的用户并提供动态内容,因为同时经过身份验证的用户并不多。
混淆在于 Google Analytic 的 cookie。我的理解是,Google 使用 javascript 在客户端上设置了 cookie,并且客户端直接与 Google 通信,因此后端不需要客户端发送的 GA cookie,并且在 vcl_recv 子例程中取消设置它们是安全的。
sub vcl_recv {
// Remove has_js and Google Analytics __* cookies.
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js)=[^;]*", "");
// Remove a ";" prefix, if present.
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
}
最佳答案
这是很多问题! :-)
Q. Is this a safe approach?
Q. Will Google still track properly, including repeat visitors?
Q. Is there anything else that I need to watch for in my policies for phase1?
# We do not use Rack::Cache but rely on Varnish instead
config.middleware.delete Rack::Cache
# varnish does not support etags or conditional gets
# to the backend (which is this app) so remove them too
config.middleware.delete Rack::ETag
config.middleware.delete Rack::ConditionalGet
def set_public_cache_control(duration)
if current_user
response.headers["Cache-Control"] = "max-age=0, private, must-revalidate"
else
expires_in duration, :public => true
response.headers["Expires"] = CGI.rfc1123_date(Time.now + duration)
end
end
def setup
set_public_cache_control 10.minutes
end
<LocationMatch "^/assets/.*$">
Header unset ETag
FileETag None
# RFC says only cache for 1 year
ExpiresActive On
ExpiresDefault "access plus 1 year"
Header append Cache-Control "public"
</LocationMatch>
<LocationMatch "^/favicon\.(ico|png)$">
Header unset ETag
FileETag None
ExpiresActive On
ExpiresDefault "access plus 1 day"
Header append Cache-Control "public"
</LocationMatch>
<LocationMatch "^/robots.txt$">
Header unset ETag
FileETag None
ExpiresActive On
ExpiresDefault "access plus 1 hour"
Header append Cache-Control "public"
</LocationMatch>
Q. There are plenty of archived articles that don't get updated, is it safe to cache them forever?
def setup
# check if it is old. This code could be anything
if news.last_updated_at < 1.months.ago
set_public_cache_control 1.year
else
set_public_cache_control 10.minutes
end
end
def set_private_cache_control(duration=5.seconds)
# logged in users never have cached content so no TTL allowed
if ! current_user
# This header MUST be a string or the app will crash
if duration
response.headers["X-Varnish-TTL"] = duration.to_s
end
end
end
call set_varnish_ttl_from_header;
sub set_varnish_ttl_from_header {
if (beresp.http.X-Varnish-TTL) {
C{
char *x_end = 0;
const char *x_hdr_val = VRT_GetHdr(sp, HDR_BERESP, "\016X-Varnish-TTL:"); /* "\016" is length of header plus colon in octal */
if (x_hdr_val) {
long x_cache_ttl = strtol(x_hdr_val, &x_end, 0);
if (ERANGE != errno && x_end != x_hdr_val && x_cache_ttl >= 0 && x_cache_ttl < INT_MAX) {
VRT_l_beresp_ttl(sp, (x_cache_ttl * 1));
}
}
}C
remove beresp.http.X-Varnish-TTL;
}
}
def setup
# check if it is old. This code could be anything
if news.last_updated_at < 1.months.ago
set_public_cache_control 10.minutes
set_private_cache_control 1.year
else
set_public_cache_control 10.minutes
end
end
关于linux - 如何处理 Varnish 堆栈中的 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095288/
我一生都找不到有关 Varnish (版本 3)对象可能属性的任何文档。 我们知道(从谷歌搜索中,varnish 文档只是咕哝,让你更加沮丧)例如,请求对象具有 url 属性(req.url),并且它
我们公司最近决定开始使用 Varnish HTTP 加速器。我们选择这个解决方案的最重要原因是因为我们是一家专门构建网络商店的公司 (Magento Enterprise) => Magento 有一
我们最近将Varnish放在了Drupal的前面,因为服务器承受着沉重的负担,总体而言,我们感到非常满意。 剩下的唯一问题是,有时我们在缓存的数据中会有一个无限的重定向循环。我们通过HTTP监控发现了
我正在设置连接到2个后端服务器(Magento 2应用程序)的Varnish 5实例。 我正在使用新的Varnish 5功能来加载多个VCL文件。为了使事情现在变得非常简单,我将在示例中使用1个后端服
我有一台 Vanilla 的Debian DigitalOcean机器,我正在尝试遵循《 Varnish 书》中的“开发人员”类(class)。我必须the first exercise, Insta
我已经为我的网站配置了Varnish,并且由于网站性能出色,但是没有人知道有任何Varnish监视工具可以查看Varnish中存储的内容以及与Memcached或APC监视工具类似的东西。 谢谢, -
我正在寻找 Varnish 高可用性设置的最佳设置。 具有多个 Varnish 实例的标准设置,每个实例都有自己的缓存存储,因此每个实例都在后端执行自己的请求。 即使使用 Varnish_Storag
我已经经历了这个 article 。有人可以帮我澄清以下有关 Varnish 各种日志位置的疑问吗? 根据 varnish 电子书 varnishncsa -显示 Varnish 访问日志和 varn
在不停机的情况下以编程方式向 Varnish director 添加或删除单个后端服务器的最佳方法是什么?我一直在寻找这方面的一个很好的例子,但找不到。 我希望能够根据需要扩展和缩减我的后端服务器。
我已经安装了 Apache 和 Tomcat,想在它们前面安装 Varnish,静态到 Apache,动态到 Tomcat(所有/static/* url 到 Apache,应该由 Varnish 缓
我目前正在做一个基于 Varnish 的项目。 我们写 vcl和 vmod .但是项目需要检查请求体。 如何在 VCL 中获取帖子请求正文或 vmod与 C function ? 最佳答案 你几乎可以
我习惯跑 varnishadm -T localhost:6082 debug.health 检查后端健康状态,但如何详细检查探测失败的原因(例如超时、错误的 http 状态代码)? 最佳答案 在 V
我正在尝试设置我的第一个 Varnish 缓存服务器,我有几个问题想问任何有经验的人。 1.) 我将 Varnish 作为独立服务器运行。我还需要在同一台服务器上安装 Apache 吗?最终,Varn
抱歉,我是 Varnish 的新手。 我正在我的 /etc/varnish/mysite.vlc 中尝试一堆东西,但无法让它工作。 我想将特定网址重定向到另一个网址。例子:如果有人访问 http://
我有这个: if (bereq.http.X-Path ~ "[a-z0-9]+\.(js|css)$") { set beresp.http.Cache-Control =
我想将Varnish用作“智能”代理,并且几乎可以正常工作。这个想法是,某些请求应通过Varnish传递,到达后端并返回,所有其他请求应返回“synt”消息,表明特定响应不包含任何结果。 这与Varn
我们将Varnish Cache用作许多客户的前端,并在任何后端出现问题时通过宽限期处理过时的内容。 我们现在确实有一个失败的后端,并且我们想增加宽限期(在生病的时候),这可能吗?我尝试在文档中进行挖
我们想要建立一个 Varnish 级联,以便我们进行1级和2级缓存。这意味着应要求 -1级 Varnish 的工艺和路线 -通往的 Varnish 等级2 - 应用 问题:如果应用程序现在在内容中添加
我在vcl中使用循环导演。我想查看所有缓存未命中URL和后端IP。现在在做sudo varnishtop -i BereqURL它只显示网址而不是后端IP的去向 54.42 BereqURL
是否可以设置 Varnish 以定期重建整个 field ?我在 Varnish 后面有一个播放应用程序。该应用程序生成了超过2,000页的网站号,其中大多数是产品页。是否可以将Varnish设置为从
我是一名优秀的程序员,十分优秀!