我使用nginx作为前端服务器,我修改了CSS文件,但是nginx仍在服务旧的.
我试图重新启动nginx,没有成功,我有谷歌搜索,但没有找到一个有效的方法来清除它.
有些文章说我们可以删除缓存目录:var/cache/nginx但是我的服务器上没有这样的目录.
我现在应该怎么做?
Dee*_*thy 178
我有完全相同的问题 - 我在Virtualbox中运行我的nginx.我没有打开缓存.但看起来像是sendfile设置on在nginx.conf,这导致了问题.@kolbyjack在评论中提到了它.
当我关闭sendfile- 它工作正常.
Sendfile用于"在一个文件描述符和另一个文件描述符之间复制数据",并且在虚拟机环境中运行时显然有一些真正的麻烦,或者至少在通过Virtualbox运行时.在nginx中关闭此配置会导致静态文件通过不同的方法提供,您的更改将立即反映出来并毫无疑问
Jas*_*ner 98
您还可以使用基于文件的文件绕过/重新缓存
proxy_cache_bypass $http_secret_header;
Run Code Online (Sandbox Code Playgroud)
作为奖励,您可以返回此标题以查看是否从缓存中获取(将返回'HIT')或从内容服务器(将返回'BYPASS').
add_header X-Cache-Status $upstream_cache_status;
Run Code Online (Sandbox Code Playgroud)
要使缓存文件过期/刷新,请使用curl或任何其他客户端向缓存页面发出请求.
curl http://abcdomain.com/mypage.html -s -I -H "secret-header:true"
Run Code Online (Sandbox Code Playgroud)
这将返回项目的新副本,它也将替换缓存中的内容.
Gna*_*foz 59
除非您通过proxy_cache_path配置了缓存区域然后使用它(例如在位置块中),否则通过: proxy_cache将不会缓存任何内容.
但是,如果你这样做了,那么根据nginx的作者,只需从缓存目录中删除所有文件就足够了.
最简单的方法: find /path/to/your/cache -type f -delete
小智 20
您可以删除nginx的缓存目录,也可以搜索特定文件:
grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*
Run Code Online (Sandbox Code Playgroud)
并且只删除一个文件到nginx刷新它们.
小智 15
这个问题有两个答案.
使用:
expires modified +90d;
Run Code Online (Sandbox Code Playgroud)
例如:
location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ {
access_log off;
root /path/to/htdocs;
expires modified +90d;
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我发现这很有用
grep -lr 'jquery.js' /path/to/nginx/cache/folder/* | xargs rm
Run Code Online (Sandbox Code Playgroud)
搜索,如果找到则删除.
在我的nginx安装中,我发现我必须去:
/opt/nginx/cache
Run Code Online (Sandbox Code Playgroud)
和
sudo rm -rf *
Run Code Online (Sandbox Code Playgroud)
在那个目录中.如果您知道nginx安装的路径并且可以找到缓存目录,则可能对您有用.请小心使用该rm -rf命令,如果您在错误的目录中,则可以删除整个硬盘.
我也有这个问题。
我的域使用cloudflare.com进行DNS(优质服务!)。啊哈!在那里:
cloudflare.com->缓存->清除缓存(我清除了所有内容)解决了我的问题!
我运行一个非常简单的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
Run Code Online (Sandbox Code Playgroud)
我们有一个非常大的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
Run Code Online (Sandbox Code Playgroud)
如果有帮助,请使用以下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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的应用未在触发该请求的特定请求中返回可缓存的响应,则proxy_cache_bypass可能会给您造成很大的伤害。
例如,如果您的应用程序在每个第一个请求中发送一个cookie,那么一个通过curl触发proxy_pass_bypass的脚本可能会在响应中获取该cookie,而nginx 不会使用该响应来刷新缓存的项目。
| 归档时间: |
|
| 查看次数: |
327941 次 |
| 最近记录: |