私はフロントガラスとしてnginxを使います、私はCSSファイルを修正しました、しかしnginxはまだ古いものを提供しています。
私はnginxを再起動しようとしましたが、成功しませんでした。また、Googledを実行しましたが、それをクリアする有効な方法が見つかりませんでした。
いくつかの記事では、キャッシュディレクトリvar/cache/nginx
を削除するだけでよいと言っていますが、私のサーバーにはそのようなディレクトリはありません。
私は今どうすればいい?
私はまったく同じ問題を抱えていました - 私はVirtualboxで私のnginxを実行していました。キャッシングがオンになっていませんでした。しかし、nginx.conf
でsendfile
がon
に設定されているため、問題が発生していました。 @ 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_cachenothingは使用されません。キャッシュされます。
しかし、そうした場合、 nginxの作者によると 、キャッシュディレクトリからすべてのファイルを削除するだけで十分です。
最も簡単な方法:find /path/to/your/cache -type f -delete
Nginxのキャッシュディレクトリを削除することも、特定のファイルを検索することもできます。
grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*
そして、nginxがそれらをリフレッシュするために1つのファイルだけを削除します。
この質問には2つの答えがあります。
つかいます:
expires modified +90d;
例えば。:
location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ {
access_log off;
root /path/to/htdocs;
expires modified +90d;
}
私はこれが役に立った
grep -lr 'jquery.js' /path/to/nginx/cache/folder/* | xargs rm
検索し、見つかった場合は削除します。
私のnginxインストールで、私は行かなければならないことがわかりました:
/opt/nginx/cache
そして
Sudo rm -rf *
そのディレクトリに。あなたがあなたのnginxインストールへのパスを知っていて、キャッシュディレクトリを見つけることができるなら、同じことがあなたのために働くかもしれません。 rm -rf
コマンドを使用するときは、非常に慎重にしてください。間違ったディレクトリにいる場合は、ハードドライブ全体を削除することができます。
私はとても簡単なbashスクリプトを実行しています。これは仕事をするのに10秒もかかり、完了したら私にメールを送ります。
#!/bin/bash
Sudo service nginx stop
Sudo rm -rf /var/cache/nginx/*
Sudo service nginx start | mail -s "Nginx Purged" [email protected]
exit 0
他の解決策がうまくいかない人のために、あなたが CloudFlare のようなDNSサービスを使っているか確認してください。その場合は "Development Mode"を有効にするか "Purge Cache"ツールを使ってください。
あなたがそれをトリガーした特定のリクエストに対してあなたのアプリがキャッシュ可能なレスポンスを返さない場合、proxy_cache_bypassはあなたに怪我をさせます。
例えば、あなたのアプリが最初のリクエストのたびにクッキーを送信する場合、curlを介してproxy_pass_bypassをトリガーするスクリプトはおそらくそのクッキーを回答に入れるでしょう、そしてnginxはnotそれを使いますキャッシュされたアイテムを更新するための応答。
私もこの問題を抱えていました。
私のドメインはDNS((素晴らしいサービス!)のためにcloudflare.comを使用しています。ああ!それはありました:
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;
}
}
Nginxキャッシュファイルを削除しようとしたが、それがうまくいっていないか断続的に働いている人のために、open_file_cacheの設定を見てください。これが有効になっていて長期間ファイルディスクリプタをキャッシュするように設定されている場合、ディスクから削除した後でも、Nginxはキャッシュされたファイルのバージョンを見ることができます。 open_file_cache_validを1に減らす必要がありました(これがファイルキャッシュを完全に無効にすることと本質的に同じかどうかはわかりません)。
find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
mkdir /etc/nginx/cache_folder
service nginx restart
正しいパスを正しく指定するように注意してください。
特定のファイルのキャッシュをクリアしたい場合は、proxy_cache_bypass
ディレクティブを使用できます。これがあなたのやり方です
location / {
proxy_cache_bypass $cookie_nocache $arg_nocache;
# ...
}
キャッシュをバイパスしたい場合は、nocacheパラメータを渡してファイルにアクセスします。
http://www.example.com/app.css?nocache=true
私のサーバーでは、nginxキャッシュフォルダーは/data/nginx/cache/
にあります
だから私はそれだけを削除しました:Sudo rm -rf /data/nginx/cache/
これが誰かに役立つことを願っています。
次のように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;
....
}
...
}
上から、 "nginx_cache"という名前のフォルダが/ tmp /に動的に作成され、キャッシュされたコンテンツを格納します。
キャッシュファイルだけを削除する正しい方法があります。これはどのキーにも一致します。例えば:
grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf
Nginx.confで設定されている場合、これはKEY "yahoo/*"に一致するすべてのキャッシュファイルを削除します。
proxy_cache_key $Host$uri;
私の場合は/etc/php/7.2/fpm/php.ini(Ubuntu)で有効になっているopcacheでした。
opcache.enable=1
0に設定すると、サーバーは最新バージョンの(php)ファイルをロードしました。
私は一種の同様の問題を経験していました:
システムの設定と問題:(仮想ボックスでは、ubuntuとnginxを使用してWebホスティングしています - PHP Webページの更新は変更を反映しませんでした外部cssファイルへ)私は、Windowsマシン上でWebサイトを開発していて、共有フォルダを介してファイルをnginxに転送しています。 nginxがcssファイルへの変更を反映していないようです(何らかの方法で更新しても役に立ちません。cssファイル名を変更してもうまくいっただけです)。
解決策:VM共有ファイル(私の場合はcssファイル)を見つけます。 nanoで開き、windows共有のファイルと比較します(それらはまったく同じように見えます)。 On VM共有ファイルをnanoで保存します。すべての変更がブラウザに反映されました。なぜこれがうまくいくのかわからないが、私の場合はそうであった。
アップデート:VMサーバの再起動後、問題が発生しました。 Solutionの下の指示に従って、CSSが再びアップデートに応答するようにしました