PCCCacheLink
サーバー: pccs3
サービス名: PCCCache
内部構成Link
cacherとrequesterの2つを使って構成している。
cacherはnginx、requesterは自作のGoアプリケーション。
リクエストはまずcacherに届き、nginxがキャッシュがないか確認する。
キャッシュがあればcacherがキャッシュを返して終わり。
なければrequesterにリクエストが転送される。
requesterはPCCProxyを通って上流にさらにリクエストを行う。
cacherから直接上流にリクエストしないのは、nginxがプロキシに対応していないため。
上流からのレスポンスがContent-type: application/atom+xml(≒ChocolateyのAPIコール)でなければ、結果はそのままrequesterからcacherに渡される。
もし上流からのレスポンスがContent-type: application/atom+xml(≒ChocolateyのAPIコール)であれば、データ内に転送先URLがないか確認し、あればすべて転送元URLに書き換えた後に渡される。
これは、ChocolateyがダウンロードURLをXML内に記述しており、書き換えないとPCCCacheを通らずダウンロードしようとしてしまうための措置。