我使用nginx作为前端服务器,我已经修改了CSS文件,但nginx仍然服务于旧的。
我尝试重新启动nginx,没有成功,我已经谷歌了,但没有找到一个有效的方法来清除它。
一些文章说我们可以删除缓存目录:var/cache/nginx,但在我的服务器上没有这样的目录。
我现在该怎么办?
我使用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;
其他回答
您还可以在一个文件的基础上使用
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"
这将返回一个新的项目副本,它也将替换缓存中的内容。
在我的nginx安装中,我发现我必须去:
sudo rm -rf /opt/nginx/cache
在那个目录里。如果你知道nginx的安装路径,并且可以找到缓存目录,同样的方法也适用于你。小心使用rm -rf命令,如果你在错误的目录,你可能会删除你的整个硬盘驱动器。
在我的服务器上,nginx缓存文件夹在/data/nginx/cache/
所以我只删除了它:sudo rm -rf /data/nginx/cache/
希望这对大家有所帮助。
在我的例子中,它是在/etc/php/7.2/fpm/php.ini (Ubuntu)中启用的opcache:
opcache.enable=1
将其设置为0使服务器加载(php)文件的最新版本。
对于那些尝试删除nginx缓存文件的人,如果它没有工作或工作断断续续,请查看您的open_file_cache设置。如果启用并配置为长时间缓存文件描述符,那么Nginx仍然可以看到缓存文件的一个版本,即使你已经从磁盘上删除了它。我不得不将open_file_cache_valid减少到1s(我不确定这在本质上是否与完全禁用文件缓存相同)。