Silex ユーザーガイド

HttpCacheServiceProvider

HttpCacheServiceProvider で Symfony2 のリバースプロクシー をサポートすることができます。

パラメーター

  • http_cache.cache_dir: HTTP キャッシュデータを保存するディレクトリ。
  • http_cache.options (オプション): HttpCache コンストラクタのためのオプションの配列。

サービス

  • http_cache: HttpCache のインスタンス
  • http_cache.esi: リクエストとレスポンスに対してESI 機能を持った Esi のインスタンス
  • http_cache.store: リクエストとレスポンスヘッダーに関するメタデータを保存する仕組みを実装した Store のインスタンス。

登録

$app->register(new Silex\Provider\HttpCacheServiceProvider(), array(
    'http_cache.cache_dir' => __DIR__.'/cache/',
));

使い方

Silex は標準で HTTP キャッシュヘッダーを返すように設定することで Vanish のようなリバースプロクシーをサポートしています。

use Symfony\Component\HttpFoundation\Response;

$app->get('/', function() {
    return new Response('Foo', 200, array(
        'Cache-Control' => 's-maxage=5',
    ));
});

Tip

Silexに$ipというアドレスからのリバースプロクシからの X-Forwarded-For* ヘッダを信用させたい場合、 Trusting Proxies に記述されているような形式でホワイトリストを作成する必要があります。

Varnishを同一マシン上で起動させている場合の例
use Symfony\Component\HttpFoundation\Request;

Request::setTrustedProxies(array('127.0.0.1', '::1'));
$app->run();

このプロバイダーは http_cache サービスを用いることで、Symfony2リバースプロクシをSilexアプリケーション上で使用可能にします。Symfony2リバースプロクシは他のプロクシと同じように動作するのでホワイトリストにしたいと思うでしょう。

use Symfony\Component\HttpFoundation\Request;

Request::setTrustedProxies(array('127.0.0.1'));
$app['http_cache']->run();

このプロバイダーはESIもサポートしています。:

$app->get('/', function() {
    $response = new Response(<<<EOF
<html>
    <body>
        Hello
        <esi:include src="/included" />
    </body>
</html>

EOF
    , 200, array(
        'Surrogate-Control' => 'content="ESI/1.0"',
    ));

    $response->setTtl(20);

    return $response;
});

$app->get('/included', function() {
    $response = new Response('Foo');
    $response->setTtl(5);

    return $response;
});

$app['http_cache']->run();

ESIを使わない場合、パフォーマンスを少し上げるために無効にすることが出来ます。

$app->register(new Silex\Provider\HttpCacheServiceProvider(), array(
   'http_cache.cache_dir' => __DIR__.'/cache/',
   'http_cache.esi'       => null,
));

Tip

キャッシュの問題をデバッグするにはアプリケーションの debug をtrueにしてください。 Symfonyは自動的にキャッシュヒットやミスに関する情報を持った X-Symfony-Cache ヘッダを全てのレスポンスに追加します。

もしSymfony Sessionプロバイダーを使って いない 場合、 PHPの標準の振舞を回避するために session.cash_limiter をからの値に設定したほうが良いです。

最後に、あなたのウェブサーバーがキャッシュ戦略を上書きしないかどうか確認して下さい。

詳細については、 Symfony2 HTTP キャッシュのドキュメント を参照してください。

commit: 4b1ae82bd6e81b26c37450feefa88319ca28b162 original: https://github.com/silexphp/Silex/blob/master/doc/providers/http_cache.rst

このページのコンテンツ

前のドキュメント

FormServiceProvider

次のドキュメント

HttpFragmentServiceProvider

ソース