我将清漆与码头工具一起使用 - 请参阅million12/varnish
GET请求工作得很好!
但我不知道我必须在设置中设置什么来缓存POST请求。
谷歌上的我发现很多帖子(从2010年或2011年开始),它说POST请求不能用清漆缓存 - 这个陈述是否仍然正确?
或者是否有另一种缓存POST请求的方法?
此处我的 varnish.vcl 设置:
vcl 4.0;
backend default {
...
}
# Respond to incoming requests.
sub vcl_recv {
unset req.http.Cookie;
}
# Set a header to track a cache HIT/MISS.
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Varnish-Cache = "HIT";
}
else {
set resp.http.X-Varnish-Cache = "MISS";
}
}
# Not cache 400 - 500 status requests
sub vcl_backend_response {
if (beresp.status >= 400 && beresp.status <= 600) {
set beresp.ttl = 0s;
}
}
感谢您的帮助!
答案 0 :(得分:5)
目前Varnish 无法缓存POST请求。
AFAIK人尝试缓存POST请求失败。 Varnish似乎最终将这些转换为GET请求。
来源:
答案 1 :(得分:5)
有一个Varnish模块和缓存POST请求的教程。这增加了将帖子主体添加到散列键并传递POST请求的功能。
VMOD适用于Varnish 4版本,包括以下内容 功能:
buffer_req_body(BYTES size): buffers the request body if it is smaller than size. This function is a “better” (bug-free**) copy of std.CacheReqBody(), so please use this one instead of the one provided by the libvmod-std. Please note that retrieving req.body makes it possible to retry pass operations(POST, PUT). len_req_body(): returns the request body length. rematch_req_body(STRING re): regular expression match on request body. hash_req_body(): adds body bytes to the input hash key.
https://info.varnish-software.com/blog/caching-post-requests-with-varnish https://github.com/aondio/libvmod-bodyaccess
请注意,在此VMOD的4.1分支中,使用内置std.cache_req_body()
而不是buffer_req_body()
,但Varnish 4.1中的常见错误会破坏4.1分支。 https://github.com/varnishcache/varnish-cache/issues/1927
答案 2 :(得分:0)
可能会让整个事情变得缓慢 - 但我们在这里谈论肮脏的变通方法吗?希望这不是一个太疯狂的解决方案..