我正在尝试有条件地删除try_files自定义标头时绕过静态 HTML 缓存的指令X-无缓存存在。
从理论上讲,这就是我想做的事情:
location @wp {
try_files $uri $uri/ /index.php?$query_string;
}
location / {
if ($http_x_no_cache) {
@wp;
}
try_files /cache$request_uri.html /cache$request_uri/index.html $uri $uri/ /index.php?$query_string;
}
这样做的原因是,登录网站的用户可以发送请求X-无缓存标头并绕过静态缓存。
答案1
如果您想阻止未登录用户的缓存,您应该检查 WordPress 登录 cookie 的值。这样您就不需要设置这些标头。
此配置可以产生您所寻找的结果:
http {
map $http_cookie $cachefiles {
default "/cache/$request_uri.html /cache$request_uri/index.html";
"~.*wordpress_logged_in.*" "";
}
server {
try_files $cachefiles $uri $uri/ /index.php?$query_string;
}
}
答案2
我能够按预期完成这项工作。您不能在map
指令中使用空格。因此,为了解决这个问题,我不得不删除额外的 try 文件位置。我不得不更新我的后端,这样我就不再需要查看多个位置了。
map $http_cookie $cachefiles {
default "/cache/$new_request_uri.html";
"~*wordpress_logged_in" "";
}
server {
....
set $new_request_uri $request_uri;
# parse URL and remove ending and trailing slashes
if ($request_uri ~ ^\/(.*)\/$) {
set $new_request_uri $1;
}
# if root then use index
if ($request_uri ~ ^\/$) {
set $new_request_uri index;
}
.....
location / {
try_files $cachefiles $uri $uri/ /index.php?$query_string;
}
....
}