official Adobe documentation 已在之前的帖子中提供给您,但它并未涵盖实现正确多租户设置所需的所有内容。
不幸的是,如果从一开始就没有考虑到多租户,并且需要一支高素质的团队,那么多租户就很难做到。
网络服务器
根据您的 Web 服务器配置,您很可能需要为新域添加额外的 VirtualHost 条目。
<VirtualHost *:80>
ServerName sitea.com
DocumentRoot /usr/lib/apache/htdocs/content/sitea
<Directory /usr/lib/apache/htdocs/content/sitea>
<IfModule disp_apache2.c>
SetHandler dispatcher-handler
ModMimeUsePathInfo On
</IfModule>
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
如果您在 Web 服务器级别重写请求,则必须通过相应地配置 mod_rewrite 添加新的重写规则,以便将请求转发到正确的内容路径。
调度员
在dispatcher configuration 中,您必须基于虚拟主机为您的站点创建一个新场。我建议你把它们分解成这样的文件:
/farms
{
$include "farm-sitea.any"
$include "farm-siteb.any"
$include "farm-flush.any"
}
注意:确保用户无法使用您的新网站访问其他网站的受限内容。例如,如果不应访问 http://sitea.com/secure/page.html,请确保 http://siteb.com/secure/page.html 也是如此。
AEM
如果您使用 Sling Mappings 来解析传入 AEM 实例的请求,则必须在 /etc/map 下为您的新域添加其他条目。
我写了大量关于链接重写here的主题。
现在您在单个 AEM 实例中托管多个站点,您将需要两个应用程序之间的通用代码库来存储实例范围的配置和实用程序类。您可以在此通用包中包含的服务配置是:
- com.day.cq.commons.servlets.RootMappingServlet.xml
- com.day.cq.rewriter.linkchecker.impl.LinkCheckerImpl.xml
- com.day.cq.wcm.core.impl.AuthoringUIModeServiceImpl.xml
- org.apache.sling.servlets.resolver.SlingServletResolver.xml
- com.day.cq.commons.impl.ExternalizerImpl.xml
- 等
说到多租户,有很多事情需要考虑。您可能需要涵盖的其他一些领域是:
- 标记分类(为内容标记集中定义的命名空间)
- ACL(站点 A 的作者应该能够编写站点 B)
- 国际化
- 工作流程(OOTB 工作流程将影响所有网站)
- 大坝
- 等
希望这会有所帮助!