如何清除nginx的caching?

我使用nginx作为前台服务器,我修改了CSS文件,但是nginx仍旧在服务于旧的服务器。

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

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

我现在应该怎么做?

我有完全相同的问题 – 我在Virtualbox中运行我的nginx。 我没有caching打开。 但看起来像sendfile被设置为在nginx.conf ,这是造成这个问题。 @kolbyjack在评论中提到了它。

当我closuressendfile – 它工作正常。

这是因为:

Sendfile用于“在一个文件描述符和另一个文件描述符之间复制数据”,并且在虚拟机环境中运行时,或者至less在运行Virtualbox时,显然会遇到一些麻烦。 在nginx中closures这个configuration会导致静态文件通过不同的方法提供,您的更改将立即反映出来,毫无疑问

您也可以使用基于文件的方式绕过/重新caching文件

 proxy_cache_bypass $http_secret_header; 

作为奖励,你可以返回这个头,看看你是否从caching(将返回'HIT')或从内容服务器(将返回'BYPASS')。

 add_header X-Cache-Status $upstream_cache_status; 

要过期/刷新caching的文件,请使用curl或任何其余的客户端向caching的页面发出请求。

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

这将返回一个新的项目副本,它也将取代caching中的内容。

除非通过proxy_cache_pathconfiguration了caching区域,然后使用它(例如在一个位置块中), 否则通过: proxy_cache将无法caching。

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

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

您可以删除nginx的caching目录或者您可以search特定的文件:

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

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

这个问题有两个答案。

  • 一个用于nginx作为反向caching
  • 另一个用于清理浏览器caching的头部input(这一个)

使用:

 expires modified +90d; 

例如:

 location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ { access_log off; root /path/to/htdocs; expires modified +90d; } 

在我的nginx安装中,我发现我必须去:

 /opt/nginx/cache 

 sudo rm -rf * 

在那个目录里 如果你知道你的nginx安装path,并且可以findcaching目录,那么你可以使用它。 要小心 rm -rf命令,如果你在错误的目录中,你可能会删除整个硬盘。

我发现这很有用

 grep -lr 'jquery.js' /path/to/nginx/cache/folder/* | xargs rm 

search,如果find,然后删除。

对于其他解决scheme无效的用户,请检查您是否正在使用CloudFlare等DNS服务。 在这种情况下,激活“开发模式”或使用“清除caching”工具。

请注意,如果您的应用没有为您触发该应用的特定请求返回可caching的响应,那么proxy_cache_bypass会给您带来一个伤害的世界。

例如,如果您的应用程序每发送一个请求就发送一个cookie,那么通过curl触发proxy_pass_bypass的脚本可能会在答案中得到该cookie,而nginx将不会使用该响应来刷新caching的项目。

 find /etc/nginx/cache_folder -type d -exec rm -rvf {} \; mkdir /etc/nginx/cache_folder service nginx restart 

注意正确指定正确的path。

对于那些尝试删除nginxcaching文件的人,或者它没有工作或间歇性地工作,看看你的设置open_file_cache。 如果启用此选项并将其configuration为长时间caching文件描述符,则Nginx可能仍会看到caching文件的一个版本,即使您已经从磁盘中删除了该文件。 我不得不减lessopen_file_cache_valid到1s(我不确定如果这基本上是完全禁用文件caching相同)。

我运行一个非常简单的bash脚本,完成这项工作需要10秒钟,并在完成后发送给我一个邮件。

 #!/bin/bash sudo service nginx stop sudo rm -rf /var/cache/nginx/* sudo service nginx start | mail -s "Nginx Purged" me@gmail.com exit 0 

您可以像下面那样在nginx.conf中添加configuration。

 ... 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 /中dynamic地创build一个名为“nginx_cache”的文件夹来存储caching的内容。

在我的服务器上,nginxcaching文件夹位于/data/nginx/cache/

所以我只删除它: sudo rm -rf /data/nginx/cache/

希望这会帮助任何人。

有一个正确的方法,只删除caching文件,匹配任何关键。 例如:

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

如果在nginx.conf中设置了这个,则删除所有与KEY“yahoo / *”匹配的caching文件:

 proxy_cache_key $host$uri; 

我遇到了一个类似的问题:

系统设置和问题:(在virtualbox我使用ubuntu和nginx虚拟主机 – PHP网页刷新没有反映外部css文件的变化)。 我正在开发Windows机器上的网站,并通过共享文件夹将文件传输到nginx。 看起来nginx并没有拿起对css文件的更改(以任何方式刷新都没有帮助。更改css文件名只是工作的东西)

解决scheme:在虚拟机上find共享文件(在我的情况下的CSS文件)。 打开纳米,并与Windows共享文件(它们看起来相同)。 在VM上使用nano保存共享文件。 所有更改现在都反映在浏览器中。 不知道为什么这个工程,但它在我的情况。

更新:重新启动虚拟机服务器后,问题返回。 按照“解决scheme”中的说明,css响应再次更新

我也有这个问题。

  • 找不到任何nginx / cache文件夹
  • sendfile已closures

我的域使用cloudflare.com DNS(伟大的服务!)。 啊哈! 那里是:

cloudflare.com – >caching – >清除caching (我清除了一切)这解决了我的问题!