Projet Socle ENT

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

Mise en frontal d'un serveur Apache

L'usage d'un Frontal (notamment Apache dans notre communauté) devant Tomcat est assez usuel et permet de mettre en oeuvre plus facilement certaines fonctionnalités techniques comme le load-balancing (ou/et le failover), la mise en place du https (SSL), l'optimisation des paramètres caches HTTP, l'envoi de page de "maintenance" lors d'un redémarrage du serveur applicatif, etc.)

Voici le schéma décrivant une telle architecture :

 

Avertissement
title [INTERNAL_esupv4] Validation de la page

État
colourRed
titleEn attente.

#ValidateurDateComments
1Julien Gribonvald14/02/2013 (matin)

En attente décision interne ESUP si on précise les noms des fichiers de configuration apache

2   

...

Info
titleQuelques esplications à propos du schéma ci-dessus
  • Les flèches représentent les liens et le protocole utilisé
  • Le texte en couleur représente l'adresse de l'entité de la même couleur
  • L'emplacement des "mod_..." et des propriétés "uportal.propriete" représente définies dans le filtre (uportal.procotol, uportal.server, ...) représentent l'emplacement de stockage de l'information
  • Le fichier source du schéma est disponible en PJ (Logiciel créé avec le logiciel DIA nécessaire)

Les instructions ci-dessous permettent de connecter un serveur Apache frontal sur une instance uPortal.

Remarque

Deux cas seront distingués :

  • Un mode simple où le serveur Apache n'est connecté qu'à un serveur applicatif hébergeant uPortal,
  • Un mode de load balancing, où le serveur Apache redistribue les requêtes entre plusieurs serveurs en fonction de la charge.
Avertissement
titleSécurité

Pour l'utilisation du protocole HTTPS avec le serveur Apache, il conviendra de définir un virtualhost sur le port 443.
http://httpd.apache.org/docs/2.4/fr/ssl/ssl_howto.html

Pour des raisons de sécurité, nous recommandons de diffuser votre application ENT via HTTPS.

Mode Simple

On est dans le cas de figure d'une architecture composée d'un serveur Apache et d'un serveur applicatif (Tomcat).

...

On va commencer par configurer l'instance de l'application en modifiant le fichier fichier filters/esup.properties qui regroupe les paramètres principaux (généraux).

Bloc de code
themeConfluence
languagenone
titlefilters/esup.properties
firstline98
linenumberstrue
...
################################################################################
## uPortal server configuration properties                                    ##
################################################################################
environment.build.uportal.server=localhost:80ent.univ.fr
environment.build.real.uportal.server=localhost:8009ent.univ.fr
environment.build.uportal.protocol=httphttps
environment.build.uportal.context=/uPortal
environment.build.real.uportal.context=/uPortal
... 

La ligne environment.build.uportal.server désigne l'adresse (et le port si nécessaire) du virtualhost du serveur frontal Apache par lequel l'utilisateur va se connecter à son ENT. Dans le cadre d'un ENT en load-balancing (avec plusieurs serveurs d'applications) cette adresse reste la même quel que soit l'instance (tomcat) de l'ENT.

La ligne environment.build.real.uportal.server désigne l'adresse réelle de l'application, à savoir l'adresse (et le port si nécessaire) du serveur applicatifpar lequel CAS pourra se connecter en HTTPS à un ENT précis. Dans le cadre d'un ENT en load-balancing (avec plusieurs serveurs d'applications) cette adresse sera spécifique à l'instance considérée. Elle pourra correspondre à un virtualhost Apache spécifique et dédié à un ProxyPass sur uniquement cette instance ENT (tomcat).

Les lignes environment.build.uportal.context et environment.build.real.uportal.context permettent de définir la racine du contexte de l'application , respectivement sur le serveur frontal et sur le serveur applicatif(on laissera comme donné par défaut /uPortal).

Enfin, le paramètre environment.build.uportal.protocolpermet de définir le protocole utilisé pour se connecter à l'application (http/https).

Bonne pratique

La propriété environment.build.real.uportal.server est dépendant de l'instance Tomcat (== souvent la machine) sur lequel l'application tournera ; pour avoir tout de même les mêmes configurations (webapp) sur les différentes machines, on conseille ici d'utiliser les system properties Java : 
exemple :  environment.build.real.uportal.server=${runnEntServerHostNum}
... puis lors de l'exécution on pourra ajouter un
export JAVA_OPTS="$JAVA_OPTS -DrunnEntServerHostNum=ent1.univ.fr"
dans le fichier env.sh de la machine considérée. 

Configuration du serveur Tomcat

...

Dans un premier temps, on va peut commenter le connecteur du port http HTTP par défaut (8080) si celui-ci ne sert plus :

Bloc de code
languagehtml/xml
titleserver.xml
...
<!-- <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" emptySessionPath="true"/> -->
...

On va peut ensuite rajouter un éditer le connecteur AJP qui permettra de connecter le serveur Tomcat avec le serveur Apache pour y modifier quelques attributs de manière usuelle :

Bloc de code
languagehtml/xml
titleserver.xml
...
<Connector port="8009" address="127.0.0.1"
           enableLookups="false" redirectPort="8443" tomcatAuthentication="false"  protocol="AJP/1.3" emptySessionPath="true" URIEncoding="UTF-8"/>
...

Le Pour rappel, le paramètre portdéfinit celui qui sera utilisé pour la connexion entre les deux serveurs . Le paramètre address n'est pas obligatoire mais est recommandé pour plus de sécurité. Il s'agit de l'adresse sur laquelle le serveur Tomcat est en écoute pour ce port.

Avertissement
Si le serveur Apache est situé sur la même machine que le serveur Tomcat, la valeur 127.0.0.1 assurera plus de sécurité que la valeur par défaut (0.0.0.0).

avec Apache  (8009 par défaut pour AJP). 

Configuration du serveur Apache

...

L'activation de ces modules se fera en dé-commenter fait via les deux lignes suivantes , ou en les ajoutant si elles ne sont pas présentes (à ajouter, décommenter, activer ... suivant votre distribution : sous distribution type debian l'utilitaire a2enmod est très efficace) :

Bloc de code
languagehtml/xml
titleFichier de configuration Apache
...
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
...

Une fois ces deux modules activés, on va rajouter à la fin du fichier dans le virtualhost cible la configuration nécessaire au bon fonctionnement du mod proxy_ajp :

Bloc de code
languagehtml/xml
titleFichier de configuration Apache
#Configuration du mod_proxy_ajp pour le frontal
<VirtualHost *:80>443>
    ...
    ProxyRequests Off
    ProxyPass         / ajp://localhosttomcat1.univ.fr:8009/
    ...
</VirtualHost>

<VirtualHost> permet de définir un hôte virtuel pour lequel les paramètres de balancing seront appliqués. Plusieurs hôtes peuvent être configurés avec des stratégies différentes. 

La ligne ProxyPass se décompose en deux paramètres importants :

...

Au redémarrage des deux serveurs, la configuration sera mise en place. En accédant à l'url httpurl https://localhostent.univ.fr/uPortal, on / on devrait donc arriver à la page d'accueil du portail.

...

Pour que https://ent.univ.fr redirige directement sur /uPortal on pourra également ajouter un rewrite du type : 

La configuration ci-dessus reprend les éléments de base du package uPortal : à chaque nouvelle portlet, il faudra ajuster ces paramètres pour que son chemin d'accès soit également redirigé vers le bon serveur.
<VirtualHost *:443>
    ...
    RewriteEngine on 
    RewriteRule ^/$ /uPortal [L,R]
    ...
</VirtualHost>
Bloc de code
languagehtml/xml
titleFichier de configuration Apache
ProxyPass /uPortal/ ajp://tomcat1:8009/uPortal/
ProxyPass /BookmarksPortlet/ ajp://tomcat2:8009/BookmarksPortlet/
ProxyPass /FunctionalTestsPortlet/ ajp://tomcat2:8009/FunctionalTestsPortlet/
ProxyPass /NewsReaderPortlet/ ajp://tomcat2:8009/NewsReaderPortlet/
ProxyPass /NotificationPortlet/ ajp://tomcat2:8009/NotificationPortlet/
ProxyPass /ResourceServingWebapp/ ajp://tomcat1:8009/ResourceServingWebapp/
ProxyPass /SimpleContentPortlet/ ajp://tomcat2:8009/SimpleContentPortlet/
ProxyPass /WeatherPortlet/ ajp://tomcat2:8009/WeatherPortlet/
ProxyPass /WebProxyPortlet/ ajp://tomcat2:8009/WebProxyPortlet/
ProxyPass /cas/ ajp://tomcat3:8009/cas/
ProxyPass /cas-proxy-test-portlet/ ajp://tomcat3:8009/cas-proxy-test-portlet/
ProxyPass /email-preview/ ajp://127.0.0.1:8010/email-preview/
ProxyPass /jasig-widget-portlets/ ajp://tomcat2:8009/jasig-widget-portlets/
ProxyPass /pluto-testsuite/ ajp://tomcat2:8009/pluto-testsuite/

Load Balancing

Info
La configuration du load balancing via un serveur Apache est détaillée sur cette page.

...