多个子域请求一个Symfony应用程序。这样行吗?

多个子域请求一个Symfony应用程序。这样行吗?,symfony,Symfony,我有一个“这行得通吗?”的问题 我正在构建一个多租户应用程序。将配置DNS和Apache,以便多个子域将指向该站点 site1.example.com site2.example.com site3.example.com 等等 我将使用$request->getHost()返回的值根据子域交付不同的内容 对于大多数请求,我将从主机名派生并验证一个整数site_id值。这将在数据库查询中用于检索和交付适当的内容 我还将使用{%render url(route)%}使用细枝子模板,其中子模板路由的

我有一个“这行得通吗?”的问题

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

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

等等

我将使用$request->getHost()返回的值根据子域交付不同的内容

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

我还将使用{%render url(route)%}使用细枝子模板,其中子模板路由的操作将基于主机交付自定义内容。它可能呈现具有使用主机名构造的名称的唯一模板

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

我用这个想法做了一些简单的测试,它似乎起作用了。有什么问题或问题我都忘了吗?我不想做一些不太受支持的事情。我对缓存等事情有点紧张。Symfony对我使用多个主机名访问网站感到高兴吗

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

我知道有新的按主机名路由功能。我认为这对我来说没什么用处,因为我希望不管主机是什么,都能执行相同的操作方法

我想我很好,但我真的很感激在我承诺这件事之前有任何评论


谢谢

我意识到这对你来说可能太晚了,但我想我还是会插嘴的

简而言之,我在一个与你描述的基于symfony2.1的网站非常相似的生产环境中生活,它工作得非常好

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

您提到的各种子系统似乎都是合理的,与我所做的类似。我会将所有与“我是site1还是site2”相关的代码集中到一个服务中,然后您可以将其传递给模板助手或其他自定义服务

将firewall.name.memory_me.cookie和framework.security.cookie_domain设置为.example.com将允许您跨所有域无缝登录(以及同样重要的注销),例如,对于那些允许查看site1和site2的用户。这里的一个问题是,正确实现cookie安全性的浏览器将要求您的域名中至少有一个点(不包括前导点)。。。因此,如果您的开发计算机是localhost.localdomain,并且您正试图在.localdomain上设置cookie,那么您可能会有点挠头。(我对自己还不知道这一点感到非常恼火。)

正如您所提到的,在这种情况下,按主机名进行路由并不是非常有用。尽管您可以想象将主机名作为参数传递给所有控制器操作,但如果您在每个请求上都这样做,则这是反干式的。最好创建kernel.request侦听器

其他随机提示:

$router->getContext()->setHost( 'site2.example.com' );
$url = $router->generate( 'homepage', array(), true );
将允许您生成指向其他子域的链接


希望你一切顺利

我意识到这对你来说可能太晚了,但我想我还是会插话的

简而言之,我在一个与你描述的基于symfony2.1的网站非常相似的生产环境中生活,它工作得非常好

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

您提到的各种子系统似乎都是合理的,与我所做的类似。我会将所有与“我是site1还是site2”相关的代码集中到一个服务中,然后您可以将其传递给模板助手或其他自定义服务

将firewall.name.memory_me.cookie和framework.security.cookie_domain设置为.example.com将允许您跨所有域无缝登录(以及同样重要的注销),例如,对于那些允许查看site1和site2的用户。这里的一个问题是,正确实现cookie安全性的浏览器将要求您的域名中至少有一个点(不包括前导点)。。。因此,如果您的开发计算机是localhost.localdomain,并且您正试图在.localdomain上设置cookie,那么您可能会有点挠头。(我对自己还不知道这一点感到非常恼火。)

正如您所提到的,在这种情况下,按主机名进行路由并不是非常有用。尽管您可以想象将主机名作为参数传递给所有控制器操作,但如果您在每个请求上都这样做,则这是反干式的。最好创建kernel.request侦听器

其他随机提示:

$router->getContext()->setHost( 'site2.example.com' );
$url = $router->generate( 'homepage', array(), true );
将允许您生成指向其他子域的链接


希望你一切顺利

谢谢你。我的兼职项目进展缓慢,涉及到这一点,它工作得很好,尽管我还没有对缓存做任何特别的事情,很可能也不需要做。谢谢。我的兼职工作进展缓慢