【发布时间】:2020-09-23 19:06:51
【问题描述】:
我有以下 Varnish 配置:
# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_hash {
if (req.http.cookie ~ "wordpress_logged_in_[a-z0-9]+") {
set req.http.X-TMP = regsuball(req.http.cookie, "wordpress_logged_in_[a-z0-9]+=[^;]+(; )?", "; \1=");
hash_data(req.http.X-TMP);
unset req.http.X-TMP;
}
}
sub vcl_recv {
#Admin Area
if (req.url ~ "wp-admin|wp-login") {
return (pass);
}
#woocommerce specifics
if (req.url ~ "^/(cart|my-account|checkout|addons)") {
return (pass);
}
if ( req.url ~ "\?add-to-cart=" ) {
return (pass);
}
set req.http.cookie = regsuball(req.http.cookie, "wp-settings-\d+=[^;]+(; )?", "");
set req.http.cookie = regsuball(req.http.cookie, "wp-settings-time-\d+=[^;]+(; )?", "");
set req.http.cookie = regsuball(req.http.cookie, "wordpress_test_cookie=[^;]+(; )?", "");
#set req.http.cookie = regsuball(req.http.cookie, "wordpress_logged_in_[a-z0-9]+=[^;]+(; )?", "; \1=");
#more woocommerce specifics
# Unset Cookies except for WordPress admin and WooCommerce pages
if (!(req.url ~ "(wp-login|wp-admin|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) {
unset req.http.cookie;
}
# Pass through the WooCommerce dynamic pages
if (req.url ~ "^/(cart|my-account/*|checkout|wc-api/*|addons|logout|lost-password|product/*)") {
return (pass);
}
# Pass through the WooCommerce add to cart
if (req.url ~ "\?add-to-cart=" ) {
return (pass);
}
# Pass through the WooCommerce API
if (req.url ~ "\?wc-api=" ) {
return (pass);
}
if (req.http.cookie == "") {
unset req.http.cookie;
}
return(hash);
}
sub vcl_backend_response {
# Happens after we have read the response headers from the backend.
#
# Here you clean the response headers, removing silly Set-Cookie headers
# and other mistakes your backend does.
if (beresp.ttl == 120s) {
set beresp.ttl = 1h;
}
#set beresp.http.host = bereq.http.host;
}
sub vcl_deliver {
# Happens when we have all the pieces we need, and are about to send the
# response to the client.
#
# You can do accounting or modifying the final object here.
}
我的目标是确保我在 URL 上有两个不同的缓存版本,具体取决于用户是否登录。我可以通过名为 wordpress_logged_in_[some id] 的 cookie 来确定。
我试图在this article 中找到这方面的灵感,但我无法根据客户端是否有前面提到的 cookie 得到两种不同的结果。对我来说,无论 cookie 是否存在,它似乎都是相同的缓存内容。
如果能帮助我理解我的问题,我将不胜感激。
【问题讨论】:
标签: varnish varnish-vcl varnish-4