我使用nginx作为前端服务器,我已经修改了CSS文件,但nginx仍然服务于旧的。

我尝试重新启动nginx,没有成功,我已经谷歌了,但没有找到一个有效的方法来清除它。

一些文章说我们可以删除缓存目录:var/cache/nginx,但在我的服务器上没有这样的目录。

我现在该怎么办?


当前回答

有一个正确的方法只删除缓存文件,它匹配任何KEY。例如:

grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf

如果在nginx.conf中设置了KEY "yahoo/*",则删除所有与之匹配的缓存文件:

proxy_cache_key $host$uri;

其他回答

可以删除nginx缓存目录,也可以搜索指定文件:

grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*

并且只删除一个文件nginx刷新它们。

您还可以在一个文件的基础上使用

proxy_cache_bypass $http_secret_header;

作为奖励,你可以返回这个头,看看你从缓存(将返回'HIT')或从内容服务器(将返回'BYPASS')得到它。

add_header X-Cache-Status $upstream_cache_status;

要使缓存文件过期/刷新,请使用curl或任何rest客户端向缓存页面发出请求。

curl http://abcdomain.com/mypage.html -s -I -H "secret-header:true"

这将返回一个新的项目副本,它也将替换缓存中的内容。

除非你通过proxy_cache_path配置了一个缓存区,然后使用它(例如在一个位置块中),通过: Proxy_cache不会缓存任何东西。

然而,如果你这样做了,那么根据nginx的作者,简单地从缓存目录中删除所有文件就足够了。

最简单的方法:find /path/to/your/cache -type f -delete

有一个正确的方法只删除缓存文件,它匹配任何KEY。例如:

grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf

如果在nginx.conf中设置了KEY "yahoo/*",则删除所有与之匹配的缓存文件:

proxy_cache_key $host$uri;

我有完全相同的问题-我在Virtualbox中运行我的nginx。我没有打开缓存。但是看起来sendfile在nginx.conf中被设置为on,这就是导致问题的原因。@kolbyjack在上面的评论中提到过。

当我关闭发送文件-它工作得很好。

这是因为:

Sendfile用于“在一个文件描述符和另一个文件描述符之间复制数据”,显然在虚拟机环境中运行时存在一些实际问题,或者至少在通过Virtualbox运行时。在nginx中关闭这个配置会导致静态文件通过不同的方法被服务,你的更改会立即毫无疑问地反映出来

它与这个错误有关:https://www.virtualbox.org/ticket/12597