22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

画像を返すアプリケーションのキャッシュをNginxで取る際の注意

Posted at

画像を返すルーティングを持つアプリケーションで URL が画像に対して一意に決まるなら Nginx 側でキャッシュを取ってアプリケーションの負荷を下げたいと考えると思います

そしてそのような画像を返すなら expires を付けてユーザーのブラウザにもキャッシュさせたいところ

ブラウザは HTTP のレスポンスヘッダーに Last-ModifiedExpiresCache-Control などを付けるとブラウザは次回のリクエストでは If-Modified-Since を付けてくれます
そこで Nginx は Last-ModifiedIf-Modified-Since と同じかそれより昔ならステータスコード 304 番を返すのでブラウザは手元のキャッシュを表示することでコンテンツ自体をダウンロードする必要がなくなります

しかしよく考えれば当然ですが,Nginx が Last-Modified の時間を把握していなければ Nginx がステータスコード 304 を返せばよいのか 200 を返せばよいのか判断できません

Nginx が画像ファイル自体を配布する際はファイルのタイムスタンプから判断ができますが,動的に画像を生成するアプリケーションの場合は Last-Modified をアプリケーション側で付けてあげないと Nginx が判断できず常に 200 を返すようになってしまいます

また Nginx 自体がキャッシュを持っていますのでアプリケーションを変更した際は必ずキャッシュを消しましょう

と,この件で何時間も悩んだのでメモ書きでした

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?