Modifier le fichier

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>