nginxで勝手にproxy_cacheのファイルが消えてました。
そして、キャッシュファイルを複数サーバーで共有(同期)していたことが原因で、以下のエラーにぶち当たりました。
[crit] 8250#0: unlink() "FILE NAME" failed (2: No such file or directory)
unlink() "FILE NAME" failed (2: No such file or directory)
「キャッシュ消そう(unlinkしよう)と思ったけど、そんなファイルないよ」って言ってます。
これは、以下の流れで発生したと思われます。
- サーバーAでキャッシュ消す
- キャッシュ同期
- サーバーBでキャッシュ消そうとする
- unlink failedエラー
対応方法
そもそもキャッシュが消えるのがおかしい。なぜだ?と思ったら、キャッシュファイルの上限値を超えてたのが原因でした。
proxy_cache_path
のmax_size
を引き上げることで対応できました。
この時df
などで空容量を把握しておかないと、数時間後に「ディスク容量がない」系のエラーで怒られます
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=ゾーン名:ゾーン上限 max_size=キャッシュ上限;