Configuration d'un domaine statique pour les ressources
Il est possible de configurer un domaine statique pour les ressources statiques servies. Ce mécanisme permet de partager les ressources statiques entre les différents sites K-Sup (partage de cache navigateur et éventuellement apache)
Mise en peuvre
Configuration K-Sup
- Valoriser la propriété "static.resource.domain" dans le env.properties avec le nom de domaine statique (par exemple https://static.acme.com)
Ce nom de domaine est injecté dans le contexte de la requête via le tag ksup:staticDomain (cf META-INF/resources/WEB-INF/jsp/head.jsp)
...
<head>
<c:if test="${not empty headViewModel.staticDomain}">
<resources:staticDomain domain="${headViewModel.staticDomain}"/>
</c:if>
<title><c:out value="${headViewModel.title}" /></title>
...
Tous les scripts ajoutés via les tag resources:link, resources:script ou resources:getScripts seront automatiquement prexifés avec le nom du domaine statique.
Ce mécanismse fonctionne en collaboration avec un filtre CORS (cf src/main/java/com/kosmos/http/filter/StaticDomainCORSFilter.java) qui ajoute un header Access-Control-Allow-Origin et permet au navigateur d'autoriser le chargement de la ressource.
Note: Ce mécanisme ne fonctionne pas avec les fichiers SVG (le SVG est un format xml et le navigateur interdit le chargement d'un xml en dehors du domaine courant, y compris sur les sous-domaines.
Configuration du frontal web
Un site virtuel doit être mis en place sur le frontal web afin de répondre aux requêtes sur le domaine statique. Ce site virtuel va ensuite récrire le header Host avec le domaine du site principal et formwarder la requete vers le K-Sup.
Un cache peut également être mis en oeuvre afin de décharger le tomcat.
Par exemple, pour un serveur apache,
<VirtualHost *:*>
ServerName static.acme.com
ProxyPass / "http://tomcat:8080/"
RequestHeader set Host "www.acme.com"
ProxyPreserveHost On
<IfModule mod_cache.c>
CacheQuickHandler on
CacheHeader on
CacheIgnoreNoLastMod On
CacheDefaultExpire 7200
CacheIgnoreCacheControl On
<IfModule mod_cache_disk.c>
CacheRoot "/var/cache/apache2/mod_cache_disk"
CacheEnable disk "/"
CacheDirLevels 3
CacheDirLength 3
CacheMaxFileSize 2000000
CacheIgnoreHeaders Set-Cookie Cookie
</IfModule>
</IfModule>
</VirtualHost>