285

フロント サーバーとして nginx を使用し、CSS ファイルを変更しましたが、nginx はまだ古いファイルを提供しています。

nginx を再起動しようとしましたが成功しませんでした。Google で検索しましたが、有効なクリア方法が見つかりませんでした。

一部の記事では、キャッシュ ディレクトリを削除するだけでよいと書かれています:var/cache/nginxが、私のサーバーにはそのようなディレクトリはありません。

私は今どうすればいい?

4

24 に答える 24

194

まったく同じ問題がありました-Virtualboxでnginxを実行していました。キャッシュを有効にしていませんでした。sendfileしかし、に設定されてonいるように見えnginx.conf、それが問題の原因でした。@kolbyjack が上記のコメントで言及しました。

オフにするsendfileと、正常に機能しました。

それの訳は:

Sendfile は「あるファイル記述子と別のファイル記述子の間でデータをコピーする」ために使用されますが、仮想マシン環境で実行する場合、または少なくとも Virtualbox を介して実行する場合に、実際に問題が発生するようです。nginx でこの構成をオフにすると、静的ファイルが別の方法で提供され、変更がすぐに反映され、問題がなくなります。

これは、このバグに関連しています: https://www.virtualbox.org/ticket/12597

于 2012-10-29T06:21:23.293 に答える
67

proxy_cache_pathを介してキャッシュ ゾーンを構成し、それを (たとえば、ロケーション ブロックで) 使用しない限り、次のように: proxy_cache何もキャッシュされません。

ただし、nginx の作成者によると、キャッシュ ディレクトリからすべてのファイルを削除するだけで十分です。

最も簡単な方法:find /path/to/your/cache -type f -delete

于 2011-08-01T10:07:57.323 に答える
22

nginx のキャッシュ ディレクトリを削除するか、特定のファイルを検索できます。

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

そして、ファイルを 1 つだけ削除して、nginx で更新します。

于 2011-07-14T10:23:49.393 に答える
15

この質問には2つの答えがあります。

  • リバースキャッシュとしてのnginx用に1つ
  • ヘッダー入力によるブラウザキャッシュのクリーニング用のもう1つ(これ)

使用する:

expires modified +90d;

例えば:

location ~* ^.+\.(css|js|jpg|gif|png|txt|ico|swf|xml)$ {
    access_log off;
    root /path/to/htdocs;
    expires modified +90d;
}
于 2012-12-06T18:11:17.763 に答える
11

これは便利だと思いました

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

検索して、見つかったら削除します。

于 2013-10-19T22:35:26.767 に答える
10

nginxのインストールで、次の場所に移動する必要があることがわかりました。

sudo rm -rf /opt/nginx/cache

そのディレクトリにあります。nginxインストールへのパスがわかっていて、キャッシュディレクトリを見つけることができる場合は、同じことが機能する可能性があります。コマンドに十分注意してくださいrm -rf。間違ったディレクトリにいると、ハードドライブ全体が削除される可能性があります。

于 2012-02-03T04:50:21.170 に答える
5

proxy_cache_bypass は、トリガーした特定のリクエストに対してアプリがキャッシュ可能なレスポンスを返さない場合、大きな損害を与える可能性があることに注意してください。

たとえば、アプリが最初のリクエストごとに Cookie を送信する場合、curl を介して proxy_pass_bypass をトリガーするスクリプトはおそらく応答でその Cookie を取得し、nginx はその応答を使用してキャッシュされた項目を更新しません。

于 2016-02-02T10:17:07.567 に答える
3

私のサーバーでは、nginx キャッシュ フォルダーは次の場所にあります。/data/nginx/cache/

だから私はそれだけを削除しました:sudo rm -rf /data/nginx/cache/

これが誰にも役立つことを願っています。

于 2015-05-13T01:47:24.573 に答える
3
find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
mkdir /etc/nginx/cache_folder
service nginx restart

正しいパスを正しく指定するように注意してください。

于 2016-01-03T14:27:43.393 に答える
2

任意の KEY に一致するキャッシュ ファイルのみを削除する正しい方法が 1 つあります。例えば:

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

これにより、nginx.conf で設定されている場合、KEY「yahoo/*」に一致するすべてのキャッシュ ファイルが削除されます。

proxy_cache_key $host$uri;
于 2015-02-24T19:21:15.813 に答える
0

私は一種の同様の問題を経験していました:

システムのセットアップと問題: (Virtualbox では、ubuntu と nginx を使用して Web ホスティングを行っています - PHP Web ページの更新は、外部 css ファイルへの変更を反映しませんでした)。WindowsマシンでWebサイトを開発しており、共有フォルダーを介してファイルをnginxに転送しています。nginx は css ファイルへの変更を取得していないようです (どのような方法で更新しても効果はありません。css ファイル名を変更することだけが機能します)。

解決策: VM で共有ファイル (私の場合は css ファイル) を見つけます。nano で開き、Windows 共有のファイルと比較します (同一に見えます)。VM で共有ファイルを nano で保存します。すべての変更がブラウザに反映されるようになりました。なぜこれが機能するのかわかりませんが、私の場合は機能しました。

更新: VM サーバーを再起動した後、問題が再発しました。解決策の指示に従うと、css が再び更新に応答するようになりました

于 2016-05-16T15:09:52.337 に答える
-2

私の場合、それは /etc/php/7.2/fpm/php.ini (Ubuntu) で有効になっている opcache でした:

opcache.enable=1

0 に設定すると、サーバーは最新バージョンの (php) ファイルをロードします。

于 2019-05-13T10:18:08.350 に答える