我使用nginx作为前端服务器,我已经修改了CSS文件,但nginx仍然服务于旧的。
我尝试重新启动nginx,没有成功,我已经谷歌了,但没有找到一个有效的方法来清除它。
一些文章说我们可以删除缓存目录:var/cache/nginx,但在我的服务器上没有这样的目录。
我现在该怎么办?
我使用nginx作为前端服务器,我已经修改了CSS文件,但nginx仍然服务于旧的。
我尝试重新启动nginx,没有成功,我已经谷歌了,但没有找到一个有效的方法来清除它。
一些文章说我们可以删除缓存目录:var/cache/nginx,但在我的服务器上没有这样的目录。
我现在该怎么办?
当前回答
我发现这很有用
grep -lr 'jquery.js' /path/to/nginx/cache/folder/* | xargs rm
搜索,如果找到就删除。
其他回答
对于那些尝试删除nginx缓存文件的人,如果它没有工作或工作断断续续,请查看您的open_file_cache设置。如果启用并配置为长时间缓存文件描述符,那么Nginx仍然可以看到缓存文件的一个版本,即使你已经从磁盘上删除了它。我不得不将open_file_cache_valid减少到1s(我不确定这在本质上是否与完全禁用文件缓存相同)。
你可以在nginx.conf中添加如下配置。
...
http {
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my-test-cache:8m max_size=5000m inactive=300m;
server {
proxy_set_header X- Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_cache my-test-cache;
proxy_cache_valid 200 302 1m;
proxy_cache_valid 404 60m;
proxy_cache_use_stale error timeout invalid_header updating;
proxy_redirect off;
....
}
...
}
在上面,在/tmp/中动态创建了一个名为“nginx_cache”的文件夹来存储缓存的内容。
如果你想清除特定文件的缓存,那么你可以使用proxy_cache_bypass指令。这就是你要做的
location / {
proxy_cache_bypass $cookie_nocache $arg_nocache;
# ...
}
现在如果你想绕过缓存,你可以通过传递nocache参数来访问文件
http://www.example.com/app.css?nocache=true
对于那些其他解决方案不工作,检查你是否使用DNS服务,如CloudFlare。在这种情况下,激活“开发模式”或使用“清除缓存”工具。
在我的情况下,触摸Css文件,使它看起来像资源改变(实际上触摸不做任何文件,除了改变最后修改时间),所以浏览器和nginx将应用最新的资源