0
我正在使用 NGINX 作为反向服务器,但是在对我的网站页面进行更改时遇到问题,直到我清除整个 NGINX 缓存后才能看到更改,这导致它清除了我的整个网站,而不仅仅是我正在工作的 URL。
所以我想知道是否可以只清除特定 URL 的缓存。
我已经配置了动态内容部分,但页面加载超过了 600 毫秒,而当它只有静态内容时,它会在 200 毫秒内加载。
我在终端中使用了这个命令行,但它也不起作用
grep -lr 'https://example.com/blog/name-of-blog.php$' /var/cache/nginx/*
另外,我已经尝试从 .htaccess 文件进行配置,但结果并不如我预期。
我希望你可以帮助我。
答案1
在当前的 nginx 版本中,缓存文件有一行以 开头KEY:
,其中包含存储在缓存文件中的对象的键。
key 的默认值记录在nginx 文档,而且是
$scheme$proxy_host$request_uri
从nginx 变量文档我们可以看到这$request_uri
是带有参数的完整请求 URI。
如果您的请求正是https://example.com/blog/name-of-blog.php
,那么上述命令应该可以找到正确的文件。
但是,如果 URL 包含查询参数,则需要将其包含在搜索字符串中,或者您需要删除$
以进行前缀匹配。
还要注意,nginx 在删除后仍会尝试访问文件的缓存版本,并且当无法打开缓存文件时,它会发出日志消息。
reload
因此从缓存中删除文件后对 nginx 进程很有用。
答案2
是的,你做错了——使用了过于复杂的模式。缓存键条目将存储为取决于proxy_cache_key
变量的值,但简单的方法不是尝试手动计算,而是只查看进入缓存树中的实际缓存文件,纠正您的搜索模式并进行正确的搜索。
看着你的grep
钥匙——我会说
- 你使用了正则表达式,但缺少
-e
- 此外,你可能根本不需要正则表达式
我将首先搜索虚拟主机名称,然后根据需要将搜索范围缩小到实际 URI。
然后像
grep -R <the pattern you figured out> /var/cache/nginx | awk '{print $1}' | xargs -I % rm %