我想知道当前ESI模块的性能如何?我在网上看过一些关于清漆上的ESI性能实际上比实际情况慢的帖子.
说我有一个超过3500 esi包含的页面,这将如何表现?esi是为这种用途而设计的吗?
caching reverse-proxy varnish server-side-includes edge-side-includes
我有一个基本的PHP页面通过Varnish加载,其中包含一个ESI回调服务器来设置cookie.cookie是通过域访问等设置的,但是当通过ESI调用时,cookie永远不会被设置.如果直接访问ESI包含路径,则cookie设置没有问题.我甚至设置了我的Varnish配置永远不会缓存任何东西,认为VCL可能会杀死cookie.
这个...
<esi:include src="/init.php?<?=http_build_query($_GET); ?>"></esi:include>
Run Code Online (Sandbox Code Playgroud)
......包括这个......
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
setcookie('superman', 'clark kent', 0, '/', '.whatever.com');
?>
Run Code Online (Sandbox Code Playgroud)
我是Varnish和ESI的新手,所以我开始怀疑这是否是一个已知的限制(使用ESI或使用Varnish的ESI实现),但我在网上找不到任何关于我的问题的讨论.
有谁知道nginx的ESI 1.0实现?
我们运行一个相对较高的内容网站.与大多数内容网站一样,每个网页的大部分都是相对静态的.文章很少改变,使它们成为某种形式的静态/边缘缓存的良好候选者.但是,有两个大问题.辅助页面元素(导航,最近的内容列表等)经常更改,快速使"完整"缓存页面无效.我们在页面中包含更多动态位也很常见,例如用户特定信息等.
拥有一个后处理内容的反向代理/负载均衡器并让我们处理包含在代理/边缘的内容真的很巧妙.对后端的初始请求将返回粗略模板,然后代理软件可以处理该模板以完成它.标记可能看起来像这样:
<html>
<body>
<div id="content">
Lorem ipsum whackem smackem.
<%
dynamic "http://related.content.service/this/story"
%>
</div>
<div id="sidebar">
<%
dynamic do |request|
url = "http://my.user.service/user-widget.html"
if request.cookies.contains?("user_token")
url = "http://my.user.service/" + request.cookies["user_token"] + "/user-widget.html"
end
error_text = "User service not available"
{ :url => url, :timeout => 500, :error => error_text }
end
%>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
您将在该示例中看到的是一小部分Ruby,它根据cookie值确定包含的文件,然后返回带有要拉入的URL的哈希值,超时值以及一些默认文本,以便在错误.理论上,所有包含也可以异步请求.
我的理解是亚马逊做了这样的事情.后端服务生成各种页面组件,具有严格的超时限制以确保整体页面速度.我希望他们的CDN服务会包含这样的东西,但它不是!
Edge Side Includes(ESI)的W3规范几乎就是我想要的.然而,对它的支持很少.它可以通过Akamai获得,有一些Oracle软件可以做到这一点,开源Varnish缓存有一个非常基本的实现.它也是一种非常丑陋的XML格式.
所以问题是:那里有什么让我做我想做的事情?是其他人以这种方式做事吗?
我最近才在阅读 Varnish Cache 的功能,以帮助优化我的 PHP 网站的性能。我读到了一个名为 Edge Side Includes 的功能,它似乎让我可以选择构建可以缓存在组件级别的 html 内容小部件。这样单个页面的动态内容可以缓存页面的一部分,而不缓存其他部分。
然后我开始研究 Amazon CloudFront,它似乎也提供页面级缓存功能。但我不清楚 CloudFront 是否提供等效的 Edge Side Includes。如果可能的话,有人可以为我澄清吗?这会影响我构建 PHP 网站的方式。
我想配置Varnish使用HTTPS(!)服务作为后端服务.这里的关键是与后端服务连接的SSL部分!我对这些HTTPS后端服务的控制有限(将它们视为托管在云中的SaaS服务).
它是这样的设置:User-Agent - > AWS ELB作为SSL终结器 - > AWS中的Varnish - >云中的HTTPS SaaS服务
原因如下: - 我想使用Varnish ESI用我自己的自定义页面页眉和页脚来装饰SaaS服务UI. - 通过让所有请求通过Varnish,我获得了有关SaaS服务的其他分析数据,否则我将无法获得 - 我可以使用Varnish重新编写SaaS服务的URL,从而有效地隐藏最终用户的SaaS服务URL
我能够将AWS ELB用作用户代理的SSL终止符,但是如何让Varnish作为源服务器访问HTTPS SaaS服务?
背景:我在一个门户网站上工作,我们将向客户展示许多不同的服务(所有服务都有自己的现有用户界面,即他们没有无头的RESP API!).将所有这些服务集中在一起的主要因素是常见的页眉和页脚(页眉显示顶级导航和登录/用户名注销).
我们拥有的服务类型如下,都有自己的UI层,我们不想复制: - 白色标记的第三方SaaS服务(例如Zendesk或Salesforce),托管在云端 - 内部开发了AWS中托管的JavaEE/Spring服务 - 我们公司其他团队开发的服务,但它们托管在我们自己的数据中心
添加ESI包含对于每个服务都很好,但我不想重复为每个服务重复多次重新实现页眉/页脚的工作.
我试图使用esi在我的网站上制作忍者缓存.这个想法是,该网站大多是静态的,如果用户登录或者不登录,我只需要做一些奇特的东西.所以我试图在页面A上放置一个,并在页面B的应用程序中设置触发器.
这样我可以在清漆上缓存页面A,让服务器处理页面B的小工作.
但是我在B页上发布的cookie没有被转发到页面A的标题但是没有用到/ /
这是我试图做的可能吗?
我可以使用ajax,但在将页面发送给用户之前在服务器内执行此操作对我来说更正确.
ps:我无法创建esi标签= /
即使是最简单的Varnish Cache ESI测试也无法正常工作.
经过尝试和尝试,我想我在这里问.
基本上它只是不包括ESI文件.它只是返回HTML而不做它的包含.
这是我的varnish start命令:
varnishd -f /etc/varnish/default.vcl -s malloc,128M -T 127.0.0.1:2000 -a 0.0.0.0:8080;
Run Code Online (Sandbox Code Playgroud)
这是我正在测试的URL:
http://vbox.local:8080/varnish-tests/test.php
Run Code Online (Sandbox Code Playgroud)
我的vcl规则:
1)default.vcl
backend default {
.host = "127.0.0.1";
.port = "80";
}
sub vcl_fetch {
if (req.url ~ "test.php") {
esi; /* Do ESI processing */
set beresp.ttl = 24h;
} elseif (req.url ~ "esi_1.php") {
set beresp.ttl = 1m;
}
return(deliver);
}
Run Code Online (Sandbox Code Playgroud)
我的示例测试esi代码
2)test.php
<html>
<head>
<?php echo "Time 1: ".time(); ?>
<br />
The time 2 is: <esi:include src="/varnish-tests/esi_1.php"/> at …Run Code Online (Sandbox Code Playgroud)