当在 Web 服务器中配置了多个具有单独 AEM 调度程序缓存场的虚拟主机时,如何从 AEM 中刷新正确的缓存?

环境

Apache HTTP Server/AEM 调度程序

步骤

为每个调度程序场各设置一个调度程序刷新代理,设置主机标头,并为“代理用户 ID”配置一个具有相关路径读取权限的用户。

在以下解决方案中,我们假定:

  • 您使用的是 Apache HTTP Server 2.2 或更高版本
  • 已配置多个虚拟主机
  • 存在多个具有单独缓存的调度程序场

例如:
Apache httpd VirtualHost 配置:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.geometrixx.com
    ServerAlias *.geometrixx.com
    DocumentRoot /var/www/html/cache-www-geometrixx-com
     ...  
</VirtualHost>

<VirtualHost *:80>
    ServerName www.geometrixx-outdoors.com
    ServerAlias *.geometrixx-outdoors.com
    DocumentRoot <Global Doc root>/site2
    Include <Configurations specific to site2>
</VirtualHost>
DocumentRoot /var/www/html/cache-www-geometrixx-outdoors-com

在调度程序配置中,您配置了多个场,以按主机名 (virtualhosts) 处理不同的站点:

/virtualhosts
  {
      "*geometrixx.com*"
  }

  /renders
  {
        ...
  }

  /cache {
       /docroot "/var/www/html/cache-www-geometrixx-com"

设置多个刷新代理

如果您只有几个单独的调度程序场(5 个或更少),则配置多个刷新代理是一种简单的解决方案。

  1. 对于每个 AEM 发布实例,打开 http://aem-host:port/miscadmin

  2. 浏览到复制 => 发布中的代理

  3. 单击编辑

  4. 代理用户 ID 下,输入相应用户的名称,您稍后将创建该用户以使其与此代理关联。您可以使用包含站点主机名的命名约定。例如:“flush-agent-www-geometrixx-com”

  5. 选择“扩展”选项卡

  6. HTTP 标头下,再添加一个标头。输入的值应为“Host: www.geometrixx.com”,其中需将“www.geometrixx.com”替换为站点的一个 DNS 主机。

  7. 单击确定以保存

  8. 转到 http://aem-host:port/useradmin,并创建步骤 4 中所提及的用户

  9. 在用户的权限选项卡上,根据您希望允许代理刷新所述站点的哪些路径,向用户授予这些路径的读取权限。例如:/content/geometrixx、/content/dam、/etc、/libs、/apps、/var

  10. 保存

  11. 对每个发布实例上的所有其他站点重复步骤 1-10。您将为每个发布实例上的每个站点各创建一个刷新代理。

  12. 在 Web 服务器上,使用符号链接共享常用路径。例如,可以将 /content/dam、/etc、/libs、/apps 和 /var 的符号链接设置为同一个通用缓存位置。之后,将单独缓存 /content 和缓存根目录下的所有内容。以下是用于 /libs 文件夹的示例命令

    ln -s /var/www/html/cache-www-geometrixx-com/libs /var/www/html/shared-cache

  13. 现在,当您激活特定站点下的页面时,刷新请求将仅定向到适用的刷新代理