请求一个Symfony应用程序的多个子域。这会起作用吗?

时间:2013-01-06 02:59:01

标签: symfony

我有一个“这会起作用吗?”问题

我正在构建一个多租户的应用程序。将配置DNS和Apache,以便多个子域将指向该站点。

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

等等......

我将使用$ request-> getHost()返回的值来根据子域提供不同的内容。

对于大多数请求,我将从主机名派生并验证整数site_id值。这将用于数据库查询以检索和传递适当的内容。

我还将使用{%render url(route)%}使用twig子模板,其中子模板路由的操作将基于主机提供自定义内容。它可能会呈现一个唯一的模板,其名称使用主机名构建。

我希望用户能够在“网站”之间切换而无需再次登录。我可以将PHP会话cookie的域和Symfony的“记住我”cookie设置为.example.com(注意点)。

我已经用这个想法完成了一些简单的测试,它似乎有效。是否有任何我忘记的问题或陷阱?我不想做一些不太支持的事情。我对缓存等事情有点紧张.Symfony对我访问具有多个主机名的网站感到高兴吗?

我启用了Symfony反向代理,虽然app / cache / prod / http_cache似乎总是空的,但似乎仍然可以正常工作,所以我猜缓存并没有真正起作用。我想这是一个不同的主题。我需要了解有关缓存的更多信息,但总的来说,Symfony反向代理会对此感到满意吗?缓存是基于完整的URL还是仅基于路由?

我知道主机名功能有新的路由选择。我不认为这对我有用,因为无论主机如何,我都希望执行相同的操作方法。

认为我很好,但在我承诺之前,我真的很感激任何评论。

由于

1 个答案:

答案 0 :(得分:0)

我意识到这可能为时已晚,无法使用,但我认为无论如何我都会说话。

简短的回答,我的生产网站非常类似于你所描述的基于symfony2.1的网站,而且效果很好。

很长的答案,从一个警告开始:它还没有使用很多symfony2缓存系统,所以在你描述时可能会有一些问题。正如他们所说,计算机科学中确实只有两个难题;命名事物,缓存失效和逐个错误。

你提到的各个子系统似乎都很明智,与我所做的相似。我会将您的所有“我是site1或site2?”相关代码集中到一个服务中,然后您可以将其传递给模板帮助程序或其他自定义服务。

设置防火墙。名称 .remember_me.cookie和framework.security.cookie_domain到.example.com将允许您跨所有域无缝登录(同样重要的是,注销),对于这些用户例如,谁可以看到site1和site2。一个问题是,正确实现cookie安全性的浏览器将需要在您的域名中至少有一个点(不包括前导点)...所以如果您的开发机器是localhost.localdomain并且您尝试在.localdomain上设置cookie ,你可能会留下一点点挠头。 (由于我不知道这一点,我对自己非常生气。)

正如您所提到的,路由主机名在此上下文中并不是非常有用。虽然您可以想象将主机名作为参数传递给所有Controller操作,但如果您在每个请求上执行此操作,则这是反DRY。最好创建一个kernel.request监听器。

其他随机提示:

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

将允许您生成指向其他子域的链接。

希望一切都为你效劳!