Configurer un serveur web apache

Modifié par jhurst le 2021/04/21 10:01


Connecteur Apache HTTPD / Tomcat : AJP

Prérequis

  • Avoir apache httpd installé
  • Avoir les modules proxy et proxy_ajp activés

Ajout d'un module dans apache httpd

Windows

  1. Vérifiez que le fichier correspondant au module est présent dans le dossier <install_apache>/modules. Par exemple pour le module proxy_ajp : fichier mod_proxy_ajp.so. Si ce n’est pas le cas, trouvez une version d’apache httpd contenant ce fichier.
  2. Activez le module dans le fichier <install_apache>/conf/httpd.conf avec :
     LoadModule nom_du_module modules/fichier_du_module
     Exemple : LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

Linux

Utilisez la commande : a2enmod nom_du_module
Exemple :

a2enmod proxy_ajp

Si cette commande échoue ou n’existe pas, suivez les mêmes étapes que pour Windows.

Configuration du routage apache httpd vers tomcat

Apache Tomcat

Du côté de Apache Tomcat, dans le fichier de configuration <install_tomcat>/conf/server.xml ajoutez ou vérifiez que le connecteur ajp existe :

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"></Connector>

Le redirectPort est utilisé pour les requêtes ayant une contrainte de sécurité obligeant un transport en SSL

Pensez à relancer Tomcat après une modification du fichier server.xml

Apache HTTPD

Du côté de Apache httpd, dans le fichier de votre hôte virtuel (virtual host), ajoutez la directive ProxyPass pour que httpd se connecte au connecteur AJP Tomcat :

<VirtualHost *:80> 
    ServerAdmin support@digdash.com 
    ServerName monserveur.digdash.com 
    DocumentRoot /var/www 
    ProxyPass / ajp:~/~/montomcat.digdash.com:8009/
   <Directory ></Directory> 
        Options FollowSymLinks
        AllowOverride None
   </Directory>
   <Directory /var/www>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Require all granted
   </Directory>
    ErrorLog logs/error_apache.log
    LogLevel warn
    CustomLog logs/access_apache.log combined
</VirtualHost>

Attention : N’oubliez pas de relancer apache httpd après une modification des fichiers de configuration.

Timeout

Il peut être nécessaire de spécifier une valeur de timeout sur le connecteur AJP plus importante que celle par défaut (60 secondes).

Certaines procédures qui dépassent la minute de calcul (exports, fabriques, sauvegarde/restauration…) peuvent alors être interrompues par Apache httpd, qui renvoie une erreur HTTP 500 au client.

Pour modifier cette valeur vous pouvez ajouter le paramètre timeout=<secondes> au niveau du ProxyPass, par exemple :

ProxyPass / ajp://montomcat.digdash.com:8009/ timeout=300

Alternative : Configuration du routage apache httpd vers tomcat avec changement du nom de répertoire

Objectif

Se connecter avec une URL comportant un répertoire parent différent.
Dans cet exemple nous allons prendre le répertoire domaine_securite1/ et donc accéder à la page d’accueil avec cette URL : http://machine/domaine_securite1/adminconsole.

Apache Tomcat

Même configuration que Configuration du routage apache httpd vers tomcat.

Apache HTTPD

Du côté de Apache HTTPD, dans le fichier de votre hôte virtuel (virtual host), ajoutez les directives ProxyPass, ProxyPassReverse et ProxyPassReverseCookiePath vers votre connecteur AJP Tomcat :

<VirtualHost *:80>
    ServerAdmin support@digdash.com
    ServerName srvapache
    DocumentRoot /var/www
    <Directory ></Directory>
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www></Directory>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Require all granted
    </Directory>
    ProxyPass "/domaine_securite1" "ajp://srvtomcat:8009"
    ProxyPassReverseCookiePath  "/" "/domaine_securite1"
    ProxyPassReverse "/domaine_securite1" "http://srvapache"
    ErrorLog logs/error_apache.log
    LogLevel warn
    CustomLog logs/access_apache.log combined
</VirtualHost>

Activer le mode https (SSL)

Prérequis

  • Posséder un certificat valide pour son réseau ou un certificat approuvé par une autorité tierce reconnue par les navigateurs par défaut. (ex : Comodo, Globalsign, Thawte, Verisign…)
  • Avoir une version de Apache httpd récente avec les derniers patchs de sécurité concernant ssl
  • Vérifier que le module ssl est activé (voir Ajouter un module dans apache httpd)
  • Avoir compris la mise en oeuvre décrite dans Connecteur Apache HTTPD / Tomcat : AJP

Configuration

Ajoutez une directive Listen pour que httpd écoute le port 443 :
<install_apache>/conf/httpd.conf :

Listen 443

Ensuite changez le port utilisé, activez le ssl et configurez le certificat et la clé utilisés :

<VirtualHost *:443>
    ServerAdmin support@digdash.com
    ServerName monserveur.digdash.com
    SSLEngine on
    SSLCertificateKeyFile /etc/ssl/maclef.key
    SSLCertificateFile /etc/ssl/moncertif.crt
    SSLCertificateChainFile /etc/ssl/certif.ca-bundle
    DocumentRoot /var/www
    ProxyPass / ajp://montomcat.digdash.com:8009/
    <Directory ></Directory>
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www></Directory>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Require all granted
    </Directory>
    ErrorLog logs/error_apache.log
    LogLevel warn
    CustomLog logs/access_apache.log combined
</VirtualHost>

SSLPassphraseDialog

Si votre clé privée est cryptée, il faudra spécifier le mot de passe au démarrage de httpd ou utiliser la directive SSLPassPhraseDialog.

Attention : Cette directive n’est pas supportée sous Windows. Il faudra l’enlever du fichier de configuration et il vous faudra remplacer votre clé privée par une clé non cryptée. Pour remplacer la clé, il suffit de décrypter la clé privée existante et d'exporter la clé non cryptée vers un fichier (avec openssl rsa -in clé_cryptée -out clé_noncryptée par exemple).

Pour utiliser la directive sans devoir saisir le mot de passe il faut créer un fichier script qui affiche le mot de passe requis (sur stdout). Par exemple :

motdepasse.sh :

#!/bin/bash
echo motdepasse

httpd.conf :

<IfModule ssl_module>
    SSLPassPhraseDialog "exec:/chemin/vers/motdepasse.sh"
</IfModule>

Équilibrage de charge (Basculement actif / actif [Loadbalancing])

Chaque session utilisateur est attribuée à un seul serveur tomcat (sticky session). Si un serveur tomcat tombe, l’utilisateur devra s’authentifier à nouveau sur le serveur actif où sa session sera ré-affectée (en cas de SSO ceci est transparent).

Prérequis

Configuration

Apache Tomcat

Du côté de Apache Tomcat, dans le fichier de configuration <install_tomcat>/conf/server.xml, ajoutez ou vérifiez que le connecteur AJP existe :

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"></Connector>

Ajoutez ou vérifiez que la balise engine possède un attribut jvmRoute avec un identifiant unique sur chaque machine cible :

<Engine name="Catalina" defaultHost="localhost" jvmRoute="m1">

Apache HTTPD

Du côté de apache httpd, dans le fichier de votre hôte virtuel (virtual host) :

<VirtualHost lap-sus:80>
    ServerAdmin support@digdash.com
    DocumentRoot "C:/htdocs"
    ServerName monserveur.digdash.com

    <Proxy balancer://monserveur.digdash.com>
        BalancerMember ajp://montomcat1.digdash.com:8009 route=m1
        BalancerMember ajp://montomcat2.digdash.com:8009 route=m2
        ProxySet stickysession=JSESSIONID
    </Proxy>

    ProxyPass / "balancer://monserveur.digdash.com/" stickysession=JSESSIONID
        scolonpathdelim=On
    <Directory ></Directory>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
        ProxyPassReverse balancer://monserveur.digdash.com/
    </Directory>

    ErrorLog logs/error_apache.log
    LogLevel warn
    CustomLog logs/acces_apache.log combined
</VirtualHost>

Cookie SameSite : Intégration de DigDash Enterprise dans un portail d'Entreprise

Les version récentes de Chrome (80 et plus) sont plus restrictives sur l'utilisation de cookies de différents sites dans une page. Dans le cas ou un dashboard DigDash est intégré à une page, par exemple via une IFRAME, vous devez maintenant configurer la stratégie SameSite pour éviter que Chrome ne filtre les cookies du dashboard. Cela peut se faire du coté Apache.

  1. Activer le module headers
    /etc/apache2/mods-enabled# ln -s ../mods-available/headers.load headers.load
  2. Configurer la politique SameSite dans /etc/apache2/apache2.conf (à la fin)
    Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=None