1

「これでいいの?」という声があります。質問。

マルチテナント アプリケーションを構築しています。DNS と Apache は、複数のサブドメインがサイトを指すように構成されます。

site1.example.com
site2.example.com
site3.example.com

など...

$request->getHost() によって返される値を使用して、サブドメインに応じて異なるコンテンツを配信します。

ほとんどのリクエストでは、ホスト名から整数の site_id 値を導出して検証します。これはデータベース クエリで使用され、適切なコンテンツを取得して配信します。

また、{% render url(route) %} を使用して twig サブ テンプレートを使用します。サブ テンプレート ルートのアクションは、ホストに基づいてカスタム コンテンツを配信します。ホスト名を使用して作成された名前を持つ一意のテンプレートをレンダリングする場合があります。

ユーザーが再度ログインしなくても「サイト」を切り替えられるようにしたい。PHP セッション Cookie と Symfony の「remember me」Cookie のドメインを .example.com (ドットに注意) に設定できます。

このアイデアでいくつかの簡単なテストを行ったところ、うまくいくようです。私が忘れている問題や落とし穴はありますか? 本当にサポートされていないことはしたくありません。キャッシングなどについて少し不安です。複数のホスト名でサイトにアクセスしても、Symfony は満足していますか?

Symfony リバース プロキシを有効にしましたが、app/cache/prod/http_cache は常に空のように見えますが、これはまだ正常に機能しているように見えるため、キャッシュが実際には機能していないと思います。それは私が推測する別の主題です。キャッシングについてもっと学ぶ必要がありますが、一般的に、Symfony のリバース プロキシはこれで満足するのでしょうか? キャッシュは完全な URL に基づいていますか、それとも単にルートに基づいていますか?

ホスト名による新しいルーティング機能があることは知っています。ホストに関係なく同じアクションメソッドを実行したいので、ここでは役に立たないと思います。

私は大丈夫だと思いますが、これをコミットする前にコメントをいただければ幸いです

ありがとう

4

1 に答える 1

1

これはおそらく遅すぎて役に立たないことはわかっていますが、とにかく私はチャイムを鳴らすと思いました.

短い答えですが、symfony2.1に基づいて説明したものと非常によく似たサイトを実稼働していますが、うまく機能します。

警告から始まる長い答え: symfony2 キャッシュ システムはまだあまり使用されていないため、説明したように落とし穴がある可能性があります。彼らが言うように、コンピューター サイエンスには実際には 2 つの難しい問題しかありません。名前付け、キャッシュの無効化、off-by-one エラー。

あなたが言及したさまざまなサブシステムはすべて賢明で、私が行ったことに似ているようです。「私はサイト 1 ですか、それともサイト 2 ですか?」に関連するすべてのコードを 1 つのサービスに集約し、それをテンプレート ヘルパーやその他のカスタム サービスなどに渡すことができます。

ファイアウォールの設定。name .remember_me.cookie と framework.security.cookie_domain を .example.com に設定すると、たとえば site1 と site2 の表示を許可されているユーザーは、すべてのドメインでシームレスにログイン (および同様に重要なことですが、ログアウト) できます。ここでの 1 つの落とし穴は、Cookie セキュリティを適切に実装するブラウザーでは、ドメイン名に少なくとも 1 つのドット (先頭のドットを除く) が必要になるということです...したがって、開発マシンが localhost.localdomain で、.localdomain に Cookie を設定しようとしている場合、少し頭を悩ませているかもしれません。(これをまだ知らなかったので、私は自分自身にかなり腹を立てていました。)

あなたが言及したように、ホスト名によるルーティングは、このコンテキストではあまり役に立ちません。ホスト名をすべての Controller アクションに引数として渡すことを想像できますが、すべてのリクエストでこれを実行している場合、これはアンチ DRY です。kernel.request リスナーを作成するのが最善です。

その他のランダムなヒント:

$router->getContext()->setHost( 'site2.example.com' );
$url = $router->generate( 'homepage', array(), true );

他のサブドメインへのリンクを生成できます。

それがすべてうまくいったことを願っています!

于 2013-04-17T09:51:11.610 に答える