railsからのsend_dataやsend_fileをsquidに拾わせる

下の記事でDBのアクセス軽減は解消されたものの、今度はmongrelに対する半静的バイナリの要求をsend_file等でいちいち相手するのはバカバカしい。
うちのサーバー郡は手前にSquidが立っていてApacheのファイルは大体がSquidが返してくれているんですが、Railsからのsend_dataやsend_fileも勝手に拾うかと思いきや、いくらやってもTCP_MISSになる。
とおもったら、なんとご丁寧にRails側でCache-Control: privateがデフォルトでかかっている。
とりあえずこのキャッシュコントロールをsend_file時のみ無視するようにする。

    headers.delete('Cache-Control')

そして、ファイルの更新時間(Last-Modifiedヘッダ)を追加する
createatは自分でnewした後time.nowを突っ込んであります。

    headers["Last-Modified"] = CGI::rfc1123_date(@uploadimg.createat)    

この二行を入れてからsend_fileをすると、しっかりとTCP_IMS_HITとしてSquidが拾ってくれました。
ちなみにcreateatの時間が前回キャッシュされた時間より未来になるとSquid側のキャッシュは破棄されます。

一応Squidのキャッシュとローカルファイル保存でほとんどといっていいほどRailsのサーバーには負荷がかからない状態になりました。
よかったよかった。