LinuCレベル2 システムアーキテクチャの設計 問33
システムアーキテクチャの設計/典型的なシステムアーキテクチャWebサイトの前段にCDN(またはキャッシュ用のリバースプロキシ)を置いたところ、ログインした利用者向けのマイページが、別の利用者に表示される事故が起きた。オリジン側で行う対策として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「システムアーキテクチャの設計」に対応。実際の試験問題ではありません)
- A静的なファイルと同様に、マイページの応答にも長いmax-ageを付けてキャッシュのヒット率を高める
- B個人向けの応答にCache-Control: privateやno-storeを付けて共有させない
- CCDNのエッジサーバーの台数を増やし、利用者ごとに別のエッジサーバーへ振り分けさせる
- Dオリジンサーバーをスケールアウトし、CDNを経由しない直接のアクセスにも応答させる
正解:B
解説
CDNやキャッシュ用のリバースプロキシは、複数の利用者が同じ応答を受け取る共有キャッシュです。利用者ごとに内容が変わる応答が共有キャッシュに保存されると、別の利用者に同じ内容が返されてしまいます。オリジンはこうした応答に Cache-Control: private(共有キャッシュへの保存を禁止)や no-store(保存そのものを禁止)を付け、キャッシュしてよい静的なコンテンツと区別します。CDN側でも、ログイン後のパスをキャッシュの対象から外す設定を併用すると安全です。
選択肢ごとの解説
- A誤り。長いmax-ageを付けると、マイページがより長く共有キャッシュに残り、事故が起きやすくなります。
- B正しい。privateやno-storeを付けると、利用者ごとの応答が共有キャッシュに保存されなくなります。
- C誤り。エッジサーバーは多数の利用者で共有されるもので、台数を増やしても誤った応答の共有は防げません。
- D誤り。オリジンの台数を増やしても、CDNが個人向けの応答をキャッシュして配る問題は解決しません。