2

私のheroku Webサイトのルートページは基本的に静的で、生成時にビューにいくつかのルビーコードがありますが、単一のユーザーに固有のものは何もないため、Varnishによってキャッシュされ、dynoにヒットすることなく提供されるようにしたいと思います(注)アプリケーションに動的なページが他にあることを確認します)。

ここでは、Heroku を使用すると非常にシンプルに見えます。追加するだけ response.headers['Cache-Control'] = 'public, max-age=300'で、再生成する前に 5 分間キャッシュされます。

これをテストするために、ページに日付 ( ) を変更して出力し、Time.now5 分間同じままかどうかを確認しましたが、新しいブラウザーでページにアクセスするたびに更新されます。同じブラウザで更新しても問題なく動作しますが、これは Heroku ではなく、ブラウザのキャッシュが原因だと思います。

HTTPヘッダーを取得するためにcurl -iを実行すると、次のようになります。

HTTP/1.1 200 OK^M
Server: nginx/0.7.67^M
Date: Thu, 29 Dec 2011 02:03:33 GMT^M
Content-Type: text/html; charset=utf-8^M
Connection: keep-alive^M
Cache-Control: public, max-age=300^M
X-Ua-Compatible: IE=Edge^M
Etag: "8a1b58f048968803980417a2914764d0"^M
X-Runtime: 0.038393^M
Content-Length: 8310^M
X-Varnish: 1040651825^M
Age: 0^M
Via: 1.1 varnish^M

基本的に、一度生成されてから Varnish にキャッシュされていることを確認したいのですが、オプションが不足していませんか? さらに設定する必要がありますか? 高速な静的ページを提供するための提案が他にあれば、それも歓迎します。

ありがとう!

4

3 に答える 3

3

この問題の原因はアプリケーションにあると思います (ヘッダーが正しく設定されていない可能性がありますか?)。

これをテストするために、1 つのキャッシュされたページと 1 つのキャッシュされていないページ (テキストを出力にレンダリングする以外には何もない) を含むアプリケーションを作成しました。

http://morning-earth-1972.heroku.com/base/cache

http://morning-earth-1972.heroku.com/base/no_cache

キャッシュのバージョンは、出力された時刻から 5 分以内に変更されないことに注意してください。

ソースはここにあります: https://github.com/neilmiddleton/heroku_varnish_test_SO_8663326

したがって、Heroku は期待どおりに動作しています。これは非常に一般的なシナリオであるため(キャッシュされたページが完全に保護されていることを確認するため)、最初に認証システムを調べて、それが何かをしていないことを確認します

于 2012-01-03T13:43:52.470 に答える
1

ブラウザでテストするときにクッキーを送信している可能性がありますか? リクエストヘッダーは何ですか?

curl -I http://host.com/を 2 回実行するとどうなりますか?

于 2011-12-29T13:03:43.273 に答える
0

問題は、Heroku には多数の Varnish サーバーがあるため、ページがすべてのサーバーにキャッシュされるまで約 10 ~ 15 回のページ更新が必要であり、その後はキャッシュされたままになることが判明しました。それはずっと機能していましたが、いくつかの更新が機能しなかったため、あきらめました。

max_age も増やして、より明確に確認できるようにしました。5 分間のキャッシュではほとんど効果がありません。

于 2012-01-05T16:18:45.663 に答える