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

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

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

我现在该怎么办?


当前回答

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

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

这是因为:

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

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

其他回答

对于那些尝试删除nginx缓存文件的人,如果它没有工作或工作断断续续,请查看您的open_file_cache设置。如果启用并配置为长时间缓存文件描述符,那么Nginx仍然可以看到缓存文件的一个版本,即使你已经从磁盘上删除了它。我不得不将open_file_cache_valid减少到1s(我不确定这在本质上是否与完全禁用文件缓存相同)。

我运行了一个非常简单的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

我发现这很有用

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

搜索,如果找到就删除。

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

sudo rm -rf /opt/nginx/cache

在那个目录里。如果你知道nginx的安装路径,并且可以找到缓存目录,同样的方法也适用于你。小心使用rm -rf命令,如果你在错误的目录,你可能会删除你的整个硬盘驱动器。

我也遇到过类似的问题:

系统设置和问题: (在virtualbox上,我使用ubuntu和nginx - PHP网页刷新没有反映到外部css文件的更改)。我正在windows机器上开发网站,并通过共享文件夹将文件传输到nginx。nginx似乎没有接收css文件的更改(以任何方式刷新都没有帮助。改变css文件名是唯一的工作)

解决方案: 在VM上找到共享文件(在我的情况下是css文件)。用nano打开并与windows共享中的文件进行比较(它们看起来是相同的)。在VM上使用nano保存共享文件。所有更改现在都反映在浏览器中。不知道为什么这样做,但它确实在我的情况下。

更新:重启虚拟机服务器后,问题返回。遵循解决方案下的说明使css再次响应更新