フロント サーバーとして nginx を使用し、CSS ファイルを変更しましたが、nginx はまだ古いファイルを提供しています。
nginx を再起動しようとしましたが成功しませんでした。Google で検索しましたが、有効なクリア方法が見つかりませんでした。
一部の記事では、キャッシュ ディレクトリを削除するだけでよいと書かれています:var/cache/nginx
が、私のサーバーにはそのようなディレクトリはありません。
私は今どうすればいい?
フロント サーバーとして nginx を使用し、CSS ファイルを変更しましたが、nginx はまだ古いファイルを提供しています。
nginx を再起動しようとしましたが成功しませんでした。Google で検索しましたが、有効なクリア方法が見つかりませんでした。
一部の記事では、キャッシュ ディレクトリを削除するだけでよいと書かれています:var/cache/nginx
が、私のサーバーにはそのようなディレクトリはありません。
私は今どうすればいい?
まったく同じ問題がありました-Virtualboxでnginxを実行していました。キャッシュを有効にしていませんでした。sendfile
しかし、に設定されてon
いるように見えnginx.conf
、それが問題の原因でした。@kolbyjack が上記のコメントで言及しました。
オフにするsendfile
と、正常に機能しました。
Sendfile は「あるファイル記述子と別のファイル記述子の間でデータをコピーする」ために使用されますが、仮想マシン環境で実行する場合、または少なくとも Virtualbox を介して実行する場合に、実際に問題が発生するようです。nginx でこの構成をオフにすると、静的ファイルが別の方法で提供され、変更がすぐに反映され、問題がなくなります。
これは、このバグに関連しています: https://www.virtualbox.org/ticket/12597
proxy_cache_pathを介してキャッシュ ゾーンを構成し、それを (たとえば、ロケーション ブロックで) 使用しない限り、次のように: proxy_cache何もキャッシュされません。
ただし、nginx の作成者によると、キャッシュ ディレクトリからすべてのファイルを削除するだけで十分です。
最も簡単な方法:find /path/to/your/cache -type f -delete
nginx のキャッシュ ディレクトリを削除するか、特定のファイルを検索できます。
grep -lr 'http://mydomain.pl/css/myedited.css' /var/nginx/cache/*
そして、ファイルを 1 つだけ削除して、nginx で更新します。
この質問には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のインストールで、次の場所に移動する必要があることがわかりました。
sudo rm -rf /opt/nginx/cache
そのディレクトリにあります。nginxインストールへのパスがわかっていて、キャッシュディレクトリを見つけることができる場合は、同じことが機能する可能性があります。コマンドに十分注意してくださいrm -rf
。間違ったディレクトリにいると、ハードドライブ全体が削除される可能性があります。
proxy_cache_bypass は、トリガーした特定のリクエストに対してアプリがキャッシュ可能なレスポンスを返さない場合、大きな損害を与える可能性があることに注意してください。
たとえば、アプリが最初のリクエストごとに Cookie を送信する場合、curl を介して proxy_pass_bypass をトリガーするスクリプトはおそらく応答でその Cookie を取得し、nginx はその応答を使用してキャッシュされた項目を更新しません。
私のサーバーでは、nginx キャッシュ フォルダーは次の場所にあります。/data/nginx/cache/
だから私はそれだけを削除しました:sudo rm -rf /data/nginx/cache/
これが誰にも役立つことを願っています。
find /etc/nginx/cache_folder -type d -exec rm -rvf {} \;
mkdir /etc/nginx/cache_folder
service nginx restart
正しいパスを正しく指定するように注意してください。
任意の KEY に一致するキャッシュ ファイルのみを削除する正しい方法が 1 つあります。例えば:
grep -lr 'KEY: yahoo' /var/lib/nginx/cache | xargs rm -rf
これにより、nginx.conf で設定されている場合、KEY「yahoo/*」に一致するすべてのキャッシュ ファイルが削除されます。
proxy_cache_key $host$uri;
私は一種の同様の問題を経験していました:
システムのセットアップと問題: (Virtualbox では、ubuntu と nginx を使用して Web ホスティングを行っています - PHP Web ページの更新は、外部 css ファイルへの変更を反映しませんでした)。WindowsマシンでWebサイトを開発しており、共有フォルダーを介してファイルをnginxに転送しています。nginx は css ファイルへの変更を取得していないようです (どのような方法で更新しても効果はありません。css ファイル名を変更することだけが機能します)。
解決策: VM で共有ファイル (私の場合は css ファイル) を見つけます。nano で開き、Windows 共有のファイルと比較します (同一に見えます)。VM で共有ファイルを nano で保存します。すべての変更がブラウザに反映されるようになりました。なぜこれが機能するのかわかりませんが、私の場合は機能しました。
更新: VM サーバーを再起動した後、問題が再発しました。解決策の指示に従うと、css が再び更新に応答するようになりました
私の場合、それは /etc/php/7.2/fpm/php.ini (Ubuntu) で有効になっている opcache でした:
opcache.enable=1
0 に設定すると、サーバーは最新バージョンの (php) ファイルをロードします。