以前から、トップページにアクセスすると、レスポンスステータスは 200 で返ってくるのに、画面に何も表示されない現象が稀に見受けられたので調査してみました。
さすがに機会損失にも繋がるということで、サクっと調べてみたら、すぐに同様の症状に悩まされている記事をいくつか発見しました。
同様の問題と思われる現象
原因はリクエストメソッドがHEADの場合
どちらかというと、fastcgi_cache_path で設定する、keys_zone や max_size の容量が問題かなと想定していたのですが、まさかキャッシュされる際のキャッシュキーがリクエストメソッド違いで同様に扱われてしまっているとは思いませんでした。
また、普段、GET や POST ではなく、リクエストヘッダの METHOD で HEAD が送信されてくるって意識はあまりないですからね。
結果的には、この fastcgi_cache_key をリクエスト URL だけにしていたところを、後ろにリクエストメソッドを足してあげるようにしました。
1 2 3 4 5 | # 変更前 fastcgi_cache_key "$request_uri"; # 変更後 fastcgi_cache_key "$request_uri$request_method"; |
前に付けてもいいのですが、URL パスで検索して一部のキャッシュだけ強制的にクリアするケースがあるので、リクエストメソッドは後ろにしてみました。
個人的なサイトでしか運用していなかったので、なかなか本格的に調べていなかったのですが、もっと早い段階で調査しておけば良かったなっと後悔です。