我使用nginx作为前端服务器,我修改了CSS文件,但是nginx仍在使用旧文件。
我试图重新启动nginx,但没有成功,我已经用Google搜索,但是找不到清除它的有效方法。
有些文章说我们只能删除缓存目录:var/cache/nginx
,但是我的服务器上没有这样的目录。
我现在应该怎么办?
cache
,但未在配置文件中找到它
我使用nginx作为前端服务器,我修改了CSS文件,但是nginx仍在使用旧文件。
我试图重新启动nginx,但没有成功,我已经用Google搜索,但是找不到清除它的有效方法。
有些文章说我们只能删除缓存目录:var/cache/nginx
,但是我的服务器上没有这样的目录。
我现在应该怎么办?
cache
,但未在配置文件中找到它
Answers:
我遇到了完全相同的问题-我在Virtualbox中运行了Nginx。我没有打开缓存。但是看起来像是sendfile
设置on
了nginx.conf
,这就是造成问题的原因。@kolbyjack在上面的评论中提到了它。
当我关闭电源时sendfile
-工作正常。
Sendfile用于“在一个文件描述符和另一个文件描述符之间复制数据”,当在虚拟机环境中运行或至少通过Virtualbox运行时,显然存在一些实际麻烦。在nginx中关闭此配置会导致通过其他方法提供静态文件,您的更改将立即得到体现,而不会出现任何问题
与此错误相关:https : //www.virtualbox.org/ticket/12597
您还可以使用逐个文件地绕过/重新缓存
proxy_cache_bypass $http_secret_header;
作为奖励,您可以返回此标头,以查看是否从缓存(将返回“ HIT”)或从内容服务器(将返回“ BYPASS”)获得它。
add_header X-Cache-Status $upstream_cache_status;
要使缓存文件过期/刷新,请使用curl或任何其他客户端向缓存页面发出请求。
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
[crit] 1640#0: unlink() "/path/to/cache/85/1cc5328db278b328f2c200c65179ad85" failed (2: No such file or directory)
您可以删除Nginx的缓存目录,也可以搜索特定文件:
grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*
并仅删除一个文件以Nginx刷新它们。
grep -lr 'http://mydomain.pl/css/myedited.css$' /var/nginx/cache/*
grep: /var/nginx/cache/*: No such file or directory
我正在使用Ubuntu 14.04.3 LTS和nginx / 1.8.1。任何想法?
sudo find /var/nginx/cache -type f -exec grep -l '/css/myedited.css' {} \;
在我的nginx安装中,我发现必须去:
/opt/nginx/cache
和
sudo rm -rf *
在该目录中。如果您知道您的nginx安装路径,并且可以找到缓存目录,则同样可以使用。请小心使用该rm -rf
命令,如果您在错误的目录中,则可以删除整个硬盘。
我也有这个问题。
我的域使用cloudflare.com进行DNS(优质服务!)。啊哈!在那里:
cloudflare.com->缓存->清除缓存(我清除了所有内容),这解决了我的问题!
我们有一个非常大的Nginx缓存(千兆字节),我们有时需要擦除它。我制定了一个脚本,该脚本可以立即清除缓存(就Nginx而言),然后删除缓存目录,而不会导致主应用程序出现磁盘I / O短缺的情况。
综上所述:
这是针对Ubuntu 16.04 LTS量身定制的脚本,缓存位于/mnt/nginx-cache
:
#!/bin/bash
set -e
TMPCACHE=`mktemp --directory --tmpdir=/mnt nginx-cache-XXXXXXXXXX`
TMPTEMP=`mktemp --directory --tmpdir=/mnt nginx-temp-XXXXXXXXXX`
# Move the old cache folders out of the way
mv /mnt/nginx-cache $TMPCACHE
mkdir -p /mnt/nginx-cache
chmod -R 775 /mnt/nginx-cache
chown www-data:www-data /mnt/nginx-cache
mv /mnt/nginx-temp $TMPTEMP
mkdir -p /mnt/nginx-temp
chmod -R 775 /mnt/nginx-temp
chown www-data:www-data /mnt/nginx-temp
# Tell Nginx about the new folders.
service nginx reload
# Create an empty folder.
rm -rf /mnt/empty
mkdir -p /mnt/empty
# Remove the old cache and old temp folders w/o thrashing the disk...
# See http://serverfault.com/questions/546177/how-to-keep-subtree-removal-rm-rf-from-starving-other-processes-for-disk-i
# Note: the `ionice` and `nice` may not actually do much, but why not?
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPCACHE
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPTEMP
rm -rf $TMPCACHE
rm -rf $TMPTEMP
rm -rf /mnt/empty
如果有帮助,请使用以下Nginx配置:
upstream myapp {
server localhost:1337 fail_timeout=0;
}
proxy_cache_path /mnt/nginx-cache/app levels=2:2:2 keys_zone=app_cache:100m inactive=1y max_size=10g;
proxy_temp_path /mnt/nginx-temp/app;
server {
listen 4316 default;
server_name myapp.com;
location / {
proxy_pass http://appserv;
proxy_cache app_cache;
proxy_cache_valid 200 1y;
proxy_cache_valid 404 1m;
}
}
对于那些其他解决方案不起作用的用户,请检查您是否正在使用DNS服务,例如CloudFlare。在这种情况下,请激活“开发模式”或使用“清除缓存”工具。
如果要清除特定文件的缓存,则可以使用proxy_cache_bypass
指令。这就是你的做法
location / {
proxy_cache_bypass $cookie_nocache $arg_nocache;
# ...
}
现在,如果要绕过缓存,则可以通过传递nocache参数来访问文件
http://www.example.com/app.css?nocache=true
app.css?nocache=true
在原始文件(不带查询)保留在高速缓存(app.css
)中的同时简单地绕过当前请求()的高速缓存吗?
您可以像下面这样在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”的文件夹以存储缓存的内容。
我们使用nginx缓存很多东西。缓存目录中有成千上万的项目。为了找到并删除项目,我们开发了一些脚本来简化此过程。您可以在下面找到此脚本的存储库:
https://github.com/zafergurel/nginx-cache-cleaner
这个想法很简单。创建缓存的索引(带有缓存键和相应的缓存文件)并在该索引文件中搜索。它确实帮助我们加快了查找项目的速度(从几分钟到亚秒级)并相应地将其删除。
我遇到了类似的问题:
系统设置和问题:( 在virtualbox上,我正在使用ubuntu和nginx进行网络托管-PHP网页刷新没有反映对外部CSS文件的更改)。我正在Windows计算机上开发网站,并通过共享文件夹将文件传输到nginx。似乎Nginx不会对css文件进行更改(以任何方式刷新都无济于事。更改css文件名只是有效的方法)
解决方案: 在VM上找到共享文件(在我的情况下为CSS文件)。用nano打开,然后与Windows共享中的文件进行比较(它们看起来相同)。在VM上使用nano保存共享文件。现在,所有更改都将反映在浏览器中。不知道为什么这行得通,但就我而言确实如此。
更新:重新启动VM服务器后,问题返回。遵循解决方案下的说明,使CSS再次响应更新
proxy_cache
吗?