我想我一定是在清漆配置上犯了一个错误。(我运行的是6.0.7版本。)以下是相关部分:
####----SECTION THREE: PURGE RULES----####
# Access Control List to define which IPs can purge content
acl purge {
"localhost";
"127.0.0.1";
"<my home IP address>";
"::1";
}
####----SECTION FOUR: PROCESSING RULES----####
sub vcl_recv {
# Do not allow purging from non-approved IPs
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return (synth(405, "This IP is not allowed to send PURGE requests."));
}
return (purge);
}
# Allow banning regexes
if (req.method == "BAN") {
if (!client.ip ~ purge) {
return (synth(405, "This IP is not allowed to send BAN requests."));
}
ban("req.http.host == " + req.http.host + " && req.url ~ ^" + req.url);
return (synth(200, "Ban added"));
}
# Allow purging regexes
if (req.method == "PURGE") {
if (req.http.X-Purge-Method == "regex") {
ban("req.url ~ " + req.url + " && req.http.host ~ " + req.http.host);
return (synth(200, "Banned"));
} else {
return (purge);
}
(注意:在我的设置中,Varnish在端口6081上运行,前面是HAProxy。)
使用此设置,无论是从我的家庭IP地址还是运行Varnish的服务器,我都可以通过运行来清除Varnish缓存中的各个页面,例如:
curl -i -X PURGE https://example.com/page/
我还可以通过运行从Varnish缓存中清除整个域,例如:
curl -i -X BAN https://example.com
同样,我可以通过运行来清除Varnish缓存中的各个页面,例如:
curl -i -X PURGE http://<IP of Varnish server>:6081/page/ -H "Host: example.com”
我还可以通过运行从Varnish缓存中清除整个域,例如:
curl -i -X BAN http://<IP of Varnish server>:6081 -H "Host: example.com”
但我注意到,我无法通过运行以下任一操作清除整个域:
curl -i -X PURGE https://example.com
或:
curl -i -X PURGE http://<IP of Varnish server>:6081 -H "Host: example.com”
要清除整个域,我必须使用BAN。我不知道这是一个问题还是一个配置错误,但似乎是,因为尽管我读到清除并不是用来清除所有内容的,但我正在使用的Wordpress插件似乎试图通过向域发送清除请求来清除。com/*
当我点击“清除所有清漆缓存”按钮时。
坦率地说,这让我感到困惑。因为它既不能在插件本身中工作,也不能在命令行中尝试。我错过了什么?插件是不是过时了?Varnish以前能用这种方式清除整个缓存吗?如果有人给我指点,我将不胜感激。谢谢
以下是VCL中清除逻辑的清理版本:
acl purge {
"localhost";
"127.0.0.1";
"::1";
}
sub vcl_recv {
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return (synth(405, "This IP is not allowed to send PURGE requests."));
}
if (req.http.X-Purge-Method == "regex") {
ban("obj.http.x-url ~ " + req.url + " && obj.http.x-host ~ " + req.http.host);
return (synth(200, "Banned"));
}
return (purge);
}
}
sub vcl_backend_response {
set beresp.http.x-url = bereq.url;
set beresp.http.x-host = bereq.http.host;
}
sub vcl_deliver {
unset resp.http.x-url;
unset resp.http.x-host;
}
PURGE
HTTP方法触发缓存失效。无任何标题返回(清除)
,这将使所使用的确切URL无效。
如果添加了
X-Purge-method
请求头,并将其设置为regex
,则会出现正则表达式匹配。无法使用return(purge)使使用正则表达式的多个对象无效
,需要禁止。
函数将ban表达式添加到ban列表中。此列表上的表达式与缓存中存储的所有对象匹配。匹配的将被删除。
您可以在Varnish服务器上使用以下命令查阅禁令列表:
varnishadm ban.list
禁止潜伏者是处理禁止列表的特殊线程,没有对请求上下文的访问权限。如果您希望这个线程从缓存中删除对象,根据请求参数,如URL或主机名,您需要应用som诡计。
如你所见,我建议的模式在
obj.http.x-url
上匹配
如果不这样做,禁令潜伏者将无法匹配对象,责任将转移到下一个请求。即使没有这些所谓的对潜伏者有利的禁令,禁令仍然会起作用,但没有那么有效。
第一个示例将使
http://example.com/page
从缓存中
curl -i -XPURGE -H "Host: example.com" "http://localhost:6081/page/"
下一个示例将使URL以
开头的所有对象无效http://example.com/page
:
curl -i -XPURGE -H "Host: example.com" -H "X-Purge-Method: regex" "http://localhost:6081/page/"
最后一个示例将使
example.com
域的缓存中的所有对象无效:
curl -i -XPURGE -H "Host: example.com" -H "X-Purge-Method: regex" "http://localhost:6081/.*"
这是最后一个例子的禁止列表项:
root@varnish:/etc/varnish# varnishadm ban.list
Present bans:
1606393598.913178 0 - obj.http.x-url ~ /.* && obj.http.x-host ~ example.com
1606393484.785268 3 C
如您所见,它匹配
示例的所有URL。com
主机。之后执行HTTP请求时,将看到Age:0
响应头。这表示此响应已存储在缓存中零秒。这意味着禁令是成功的。
我在一个数字海洋Ubuntu虚拟机上运行一个独立的清漆实例,基本上运行良好。该设置用于加载一个位于其他任何地方的旧wordpress服务器。这工作得很好,但我很难清除内容。当谈到清除时,我的意思是使URL的缓存无效,以迫使清漆从后端获取新版本(只是为了确保我看到了一些关于清除/禁止的恼怒)。 我已经为清除设置了一个ACL,就我所能看到的varnishlog的清除被接受了-从WordPress博客的
在我的php脚本中,我有一个简单的username/email exists条件,但是我想把这个错误(如果存在的话)放在html的某个地方,这样我就可以设置它的样式并将它放置在我的表单上。Echo只是把它放在左上角。我该怎么做?设置变量似乎不是最佳解决方案。
我有这样的代码,它对名为'username'的变量的用户输入进行了净化: 我想对这个页面上的每个输入执行相同的过程,但我有大约12个不同的输入,因为它是一个注册表单。有没有更简单的方法来清理和检查每个输入,而不是对每个输入应用preg_replace()和if语句?
有没有办法让HTML净化器保留在呈现的HTML中通常会看到的隐式空间? 例如,在以下情况下,您通常希望和之间有一个空格: 例1 例2
我想为DropWizard创建几个yaml文件。其中一个包含敏感信息,另一个包含非敏感信息。 你能给我指出任何文档或例子如何在DropWizard中拥有多个配置吗?
除了修改书籍的主题外,还可以通过配置 book.json 文件来修改 gitbook 在编译书籍时的行为,例如:修改书籍的名称,显示效果等等。