Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What is going on with this article?
@catatsuy

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

More than 5 years have passed since last update.

画像を返すルーティングを持つアプリケーションで 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 自体がキャッシュを持っていますのでアプリケーションを変更した際は必ずキャッシュを消しましょう

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

19
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
catatsuy
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
19
Help us understand the problem. What is going on with this article?