負荷軽減のために、nginxを用いてcacheを蓄えcacheから応答するように設定していたが、効いていなかったお話
発覚した理由
JMeterを使って負荷テストを行ったところ、バックエンドのApacheでCPU使用率が
一向に下がらず、Apache側のアクセスログも永遠と出力され続けていたので調査したら発覚した。
切り分けするためにやったこと
nginxには、cacheにヒットしたことをhttpヘッダに出力させる機能があったのでこちらで確認
1 2 |
add_header X-Cache-Status $upstream_cache_status; |
キャッシュにヒットしたら
1 2 |
X-Cache-Status: HIT |
のようにHIT
と表示される
キャッシュにヒットしなかったら
1 2 |
X-Cache-Status: MISS |
のようにMISS
と表示される
試したこと
先人の知恵を借りて、以下の設定を入れるもキャッシュされず
1 2 |
proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Cache-Control Expires Vary; |
原因
困り果てた私は、もう諦めかけていた。
しかし、WEBの表示パフォーマンスが落ちるだろうと勝手に思っていたある設定を変更してみることに
1 2 |
proxy_buffering on; |
元々、off
にしていたがon
にしたところキャッシュされて見事
1 2 |
X-Cache-Status: HIT |
となった。
まとめ
proxy_buffering
もリバースプロキシのキャッシュに関わっている設定であることがわかった。
キャッシュは効いているだろうと勝手に思っていたら、実は効いていなかったってこともあるので負荷テストなどで実際の動作は知っておくべきだなと思います。