Squidのsiblingで504エラーになる件
昨日の続き。
構成としては、インタネットからリクエストを受けるウェブサーバが二台。DNSラウンドロビンでリクエストを受ける。その直下にSquidキャッシュがいて、そこからバックエンドへリクエストを流す。
+------------+ +-------+ +---------+ | WebServer1 |->| Squid |->| backend | +------------+ +-------+ +---------+ +------------+ +-------+ +---------+ | WebServer2 |->| Squid |->| backend | +------------+ +-------+ +---------+
上の図で二つあるSquidを相互に参照できれば多少はキャッシュヒット率があがるだろうとこんな設定を入れてみた。
cache_peer 10.1.100.1 sibling 3128 3130 proxy-only
お互いをsiblingのcache_peerとして参照するってことですね。ところが実際に動かしてみると、504エラーになる。
varyヘッダかな
上記構成でSquidでキャッシュする際にはVaryヘッダをつけています。User-Agentで内容がちがったりするんで。
Vary:User-Agent,Accept-Encoding
どうもICPにしてもHTCPにしてもURIだけをキーにしてキャッシュの有無を判断している模様。
なので、ICPまたはHTCPでsiblingに対してキャッシュの有無を問合せて、「あるよ」って返答が帰ってくる。で実際にSquidがリクエストを出してみると、Varyヘッダが違うので504になる、ってことじゃないかと。
ICPやHTCPのRFCを参照してもVaryヘッダに関する記述がないみたいだし。
まぁそれほどキャッシュ率が上がるわけではないだろうから、別にいいか。