AEM Archivos de solo lectura o inmutables en la
Descripción description
Entorno
Experience Manager
Problema/Síntomas
Cuando Adobe Managed Services (AMS) aprovisiona un sistema, implementa una configuración de línea de base que hace que todo funcione y sea seguro. Estas son cosas que AMS desea garantizar que se mantengan como línea de base de funcionalidad y seguridad. Para ello, algunos archivos están marcados como de solo lectura e inmutables para evitar que los cambie.
El diseño no impide modificar su comportamiento y anular los cambios que necesite. En lugar de cambiar estos archivos, superponga su propio archivo, que reemplaza al original.
Esto también le permite asegurarse de que cuando AMS aplique parches a Dispatchers con las últimas correcciones y mejoras de seguridad, no alterarán sus archivos. A continuación, puede seguir beneficiándose de las mejoras y adoptar solo los cambios que desee.
Como se ilustra en la imagen anterior, los archivos inmutables no le impiden jugar. Simplemente evitan que se perjudique su rendimiento y lo mantienen en el carril. Este método nos permite disponer de unas cuantas características muy clave:
- Las personalizaciones se gestionan en sus propios espacios seguros
- AEM La superposición de cambios personalizados refleja la de los métodos de superposición en los informes de estado de la aplicación
- La aplicación de parches a las configuraciones de AMS se puede realizar sin alterar las personalizaciones
- Se puede probar simultáneamente la instalación base frente a las configuraciones personalizadas para ayudar a discernir si los problemas son causados por las personalizaciones o por otra cosa.
Esta es una lista típica de archivos implementados con un Dispatcher:
/etc/httpd/
├── conf
│ └── httpd.conf
├── conf.d
│ ├── available_vhosts
│ │ ├── 000_unhealthy_author.vhost
│ │ ├── 000_unhealthy_publish.vhost
│ │ ├── aem_author.vhost
│ │ ├── aem_flush.vhost
│ │ ├── aem_health.vhost
│ │ ├── aem_lc.vhost
│ │ └── aem_publish.vhost
│ ├── dispatcher_vhost.conf
│ ├── enabled_vhosts
│ │ ├── aem_author.vhost -> /etc/httpd/conf.d/available_vhosts/aem_author.vhost
│ │ ├── aem_flush.vhost -> /etc/httpd/conf.d/available_vhosts/aem_flush.vhost
│ │ ├── aem_health.vhost -> /etc/httpd/conf.d/available_vhosts/aem_health.vhost
│ │ └── aem_publish.vhost -> /etc/httpd/conf.d/available_vhosts/aem_publish.vhost
│ ├── logformat.conf
│ ├── remoteip.conf
│ ├── rewrites
│ │ ├── base_rewrite.rules
│ │ └── xforwarded_forcessl_rewrite.rules
│ ├── security.conf
│ ├── variables
│ │ └── ams_default.vars
│ └── whitelists
│ └── 000_base_whitelist.rules
├── conf.dispatcher.d
│ ├── available_farms
│ │ ├── 000_ams_author_farm.any
│ │ ├── 001_ams_lc_farm.any
│ │ └── 999_ams_publish_farm.any
│ ├── cache
│ │ ├── ams_author_cache.any
│ │ ├── ams_author_invalidate_allowed.any
│ │ ├── ams_publish_cache.any
│ │ └── ams_publish_invalidate_allowed.any
│ ├── clientheaders
│ │ ├── ams_author_clientheaders.any
│ │ ├── ams_common_clientheaders.any
│ │ ├── ams_lc_clientheaders.any
│ │ └── ams_publish_clientheaders.any
│ ├── dispatcher.any
│ ├── enabled_farms
│ │ ├── 000_ams_author_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/000_ams_author_farm.any
│ │ └── 999_ams_publish_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any
│ ├── filters
│ │ ├── ams_author_filters.any
│ │ ├── ams_lc_filters.any
│ │ └── ams_publish_filters.any
│ ├── renders
│ │ ├── ams_author_renders.any
│ │ ├── ams_lc_renders.any
│ │ └── ams_publish_renders.any
│ └── vhosts
│ ├── ams_author_vhosts.any
│ ├── ams_lc_vhosts.any
│ └── ams_publish_vhosts.any
├── conf.modules.d
│ ├── 01-cgi.conf
│ └── 02-dispatcher.conf
└── modules -> ../../usr/lib64/httpd/modules
└── mod_dispatcher.so
Para determinar qué archivos son inmutables, puede ejecutar el siguiente comando en un Dispatcher para ver:
$ lsattr -Rl /etc/httpd 2 > /dev/null | grep Immutable
Esta es una respuesta de ejemplo de los archivos que son inmutables:
/etc/httpd/conf/httpd.conf Immutable
/etc/httpd/conf.d/available_vhosts/aem_author.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_publish.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_lc.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_flush.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_health.vhost Immutable
/etc/httpd/conf.d/available_vhosts/000_unhealthy_author.vhost Immutable
/etc/httpd/conf.d/available_vhosts/000_unhealthy_publish.vhost Immutable
/etc/httpd/conf.d/rewrites/base_rewrite.rules Immutable
/etc/httpd/conf.d/rewrites/xforwarded_forcessl_rewrite.rules Immutable
/etc/httpd/conf.d/whitelists/000_base_whitelist.rules Immutable
/etc/httpd/conf.d/dispatcher_vhost.conf Immutable
/etc/httpd/conf.d/logformat.conf Immutable
/etc/httpd/conf.d/security.conf Immutable
/etc/httpd/conf.modules.d/02-dispatcher.conf Immutable
/etc/httpd/conf.dispatcher.d/available_farms/000_ams_author_farm.any Immutable
/etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any Immutable
/etc/httpd/conf.dispatcher.d/available_farms/001_ams_lc_farm.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_author_cache.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_author_invalidate_allowed.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_publish_cache.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_publish_invalidate_allowed.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_author_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_publish_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_common_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_lc_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_author_filters.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_publish_filters.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_lc_filters.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_author_renders.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_publish_renders.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_lc_renders.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_author_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_lc_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/dispatcher.any Immutable
Resolución resolution
¿Cómo realizar cambios?
Variables
Las variables permiten realizar cambios funcionales sin cambiar los propios archivos de configuración. Algunos elementos de la configuración se pueden ajustar ajustando los valores de las variables. Aquí se muestra un ejemplo resaltado del archivo /etc/httpd/conf.d/dispatcher_vhost.conf:
Include /etc/httpd/conf.d/variables/ams_default.vars
<IfModule disp_apache2.c>
DispatcherConfig conf.dispatcher.d/dispatcher.any
DispatcherLog logs/dispatcher.log
DispatcherLogLevel ${DISP_LOG_LEVEL}
DispatcherDeclineRoot 0
DispatcherUseProcessedURL 1
</IfModule>
Vea cómo la directiva DispatcherLogLevel tiene una variable de DISP_LOG_LEVEL en lugar del valor normal que vería allí. Encima de esa sección de código también verá una instrucción de inclusión en un archivo de variables. El archivo de variable /etc/httpd/conf.d/variables/ams_default.vars es lo que desea ver a continuación. Este es el contenido del archivo de variables:
Define DISP_LOG_LEVEL info
Define AUTHOR_WHITELIST_ENABLED 0
Define PUBLISH_WHITELIST_ENABLED 0
Define LIVECYCLE_WHITELIST_ENABLED 0
Define AUTHOR_FORCE_SSL 1
Define PUBLISH_FORCE_SSL 0
Define LIVECYCLE_FORCE_SSL 1
Más arriba puede ver que el valor actual de la variable DISP_LOG_LEVEL es "info". Puede ajustarlo para rastrear o depurar, o al valor numérico/nivel de su elección. Ahora, cualquier lugar que controle el nivel de registro se ajusta automáticamente.
Método de superposición
Comprenda los archivos de inclusión de nivel superior porque este es su punto de partida para realizar personalizaciones. Para empezar con un ejemplo sencillo, tiene un escenario en el que desea agregar un nuevo nombre de dominio que apunte a este Dispatcher. El ejemplo de dominio que vamos a usar es we-retail.adobe.com.. Comience copiando un archivo de configuración existente en uno nuevo donde podamos agregar nuestros cambios:
$ cp /etc/httpd/conf.d/available_vhosts/aem_publish.vhost /etc/httpd/conf.d/available_vhosts/weretail_publish.vhost
Ha copiado el archivo aem_publish.vhost existente porque ya tiene lo que necesita para que las cosas funcionen y no desea reinventar un inicio ya fuerte. Ahora edita el nuevo archivo weretail.vhost y realiza los cambios necesarios.
Antes:
<VirtualHost *:80>
ServerName publish
ServerAlias ${PUBLISH_DEFAULT_HOSTNAME}
DocumentRoot ${PUBLISH_DOCROOT}
<IfModule mod_headers.c>
Header always add X-Dispatcher ${DISP_ID}
Header always add X-Vhost "publish"
Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'"
Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'"
Header append Vary User-Agent env=!dont-vary
</IfModule>
....... SNIP.......
</VirtualHost>
Después:
<VirtualHost *:80>
ServerName weretail-publish
ServerAlias we-retail.adobe.com
DocumentRoot ${PUBLISH_DOCROOT}
<IfModule mod_headers.c>
Header always add X-Dispatcher ${DISP_ID}
Header always add X-Vhost "werteail-publish"
Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'"
Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'"
Header append Vary User-Agent env=!dont-vary
</IfModule>
....... SNIP.......
</VirtualHost>
Ahora ha actualizado ServerName y ServerAlias para que coincidan con los nuevos nombres de dominio, así como para actualizar otros encabezados de ruta de exploración. Ahora habilitemos nuestro nuevo archivo para permitir que Apache sepa utilizar nuestro nuevo archivo:
$ cd /etc/httpd/conf.d/enabled_vhosts/; ln -s ../available_vhosts/weretail_publish.vhost .
Ahora el servidor web Apache sabe que un dominio es algo para lo que debería generar tráfico, pero aún necesita informar al módulo de Dispatcher de que tiene un nuevo nombre de dominio que respetar. Comience creando un nuevo archivo *_vhost.any /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any y, dentro de él, ponga el nombre de dominio que desea respetar:
"we-retail.adobe.com"
Ahora, necesita crear un nuevo archivo de granja que use nuestro nuevo archivo de entrada vhost y comenzará copiando un archivo de inicio sólido al nuevo.
$ cp /etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any /etc/httpd/conf.dispatcher.d/available_farms/400_weretail_publish_farm.any
Veamos los cambios que debe realizar en este archivo de granja
Antes:
/publishfarm {
/virtualhosts {
$include "/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any"
}
........SNIP.........
}
Después:
/weretailpublishfarm {
/virtualhosts {
$include "/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any"
}
........SNIP.........
}
Ahora ha actualizado el nombre de la granja y la inclusión que utiliza en la sección /virtualhosts de la configuración de la granja. Debe habilitar este nuevo archivo de granja para que pueda utilizarlo en la configuración en ejecución:
$ cd /etc/httpd/conf.dispatcher.d/enabled_farms/; ln -s ../available_farms/400_weretail_publish_farm.any .
Ahora solo tiene que volver a cargar el servicio webserver y utilizar nuestro nuevo dominio!
Nota:
Tenga en cuenta que solo ha cambiado las partes que necesitaba cambiar y ha aprovechado las inclusiones existentes y el código que venía con los archivos de configuración de línea de base. Solo tiene que definir el elemento que debe cambiar. Facilita mucho las cosas y nos permite mantener menos código