SIM : config Tomcat spécifique non prise en compte

Bonjour,

(sans doute depuis la MAJ en P23) nous constatons que nos configs tomcat spécifiques ne sont plus prises en compte par le SIM. Par exemple sur notre SIM de recette (http://rec-sim.cr-bretagne.fr/ui), l’URL affichée dans l’IHM est http://alerte.test-sim.cr-bretagne.fr/alerte, alors qu’elle devrait être https://rec.bretagne.bzh/alerte

Quelles sont ces “configs tomcat spécifiques” et comment sont elles faites ?

[simplicite@Rec-sim ~]$ more /var/simplicite/hooks/post-upgrade.sh
/var/simplicite/hooks/crb-configure-jdbc-driver.sh "$1" "$2" "$3"
/var/simplicite/hooks/crb-configure-waf.sh "$1" "$2" "$3"
[simplicite@Rec-sim ~]$ more /var/simplicite/hooks/crb-configure-waf.sh

echo "-------------------------------------------"
echo "CRB : Configure WAF"
echo "Name = $1"
echo "Version = $2"
echo "Database = $3"
echo "Dir = `pwd`"
echo "-------------------------------------------"


###################################################################################################
# Gestion de la configuration WAF
# B. Buffereau, le 02/03/2018
#
# La configuration WAF par défaut est définie au niveau du SIM :
# more /var/simplicite/config.sh
#
# pour surcharger cette configuration sur une instance Simplicité:
# vi /home/<instance>/.simplicite
#       CRB_WAF=oui / CRB_WAF=non
###################################################################################################

# On fait un backup de la config actuelle
cp tomcat/conf/server.xml tomcat/conf/server.xml.backup

pattern='<Connector port="${tomcat.httpport}"'
config="proxyPort=\"443\" proxyName=\"$CRB_WAF_NAME\" scheme=\"https\" secure=\"true\""

# On commence par supprimer la config WAF CRB si elle existe
echo "Suppression de la config WAF CRB, si elle existe"
sed -i "s/$pattern $config/$pattern/" tomcat/conf/server.xml

# On injecte la config WAF si nécessaire
if [ "${CRB_WAF}" = 'oui' ]; then
        echo "Injection de la config WAF CRB"
        sed -i "s/$pattern/$pattern $config/" tomcat/conf/server.xml
fi



exit 0
[simplicite@Rec-sim ~]$ more /home/alerte/tomcat/conf/server.xml | grep Connector
  <!-- A "Service" is a collection of one or more "Connectors" that share
    <Connector port="${tomcat.httpport}" proxyPort="443" proxyName="rec.bretagne.bzh" scheme="https" secure="true" protocol="HTTP/1.1" redirectPort="443" maxPostSize="-1" maxThreads="200" maxConnections="-1">
    </Connector>
    <Connector port="${tomcat.httpsport}" protocol="HTTP/1.1" scheme="https" secure="true" maxPostSize="-1" maxThreads="200" maxConnections="-1">
    </Connector>
    <!-- AJP Connector port="${tomcat.ajpport}" protocol="AJP/1.3" redirectPort="443" maxPostSize="-1">
    </Connector AJP -->
    <!-- SSL Connector port="${tomcat.sslport}" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" SSLEnabled="true" maxPostSize="-1" maxThreads="200" maxConnections="-1">
    </Connector SSL -->
    <!-- A "Connector" represents an endpoint by which requests are received
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    <Connector port="8080" protocol="HTTP/1.1"
    <!-- A "Connector" using the shared thread pool-->
    <Connector executor="tomcatThreadPool"
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    </Connector>
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
    </Connector>
    <!-- Define an AJP 1.3 Connector on port 8009
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Les blocs Connector du fichier server.xml ont un peu changé, ça ressemble désormais à ça

    <Connector port="${tomcat.httpport}" protocol="HTTP/1.1" redirectPort="443" maxPostSize="-1" maxThreads="200" maxConnections="-1">
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
    </Connector>
    <Connector port="${tomcat.httpsport}" protocol="HTTP/1.1" scheme="https" secure="true" maxPostSize="-1" maxThreads="200" maxConnections="-1">
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
    </Connector>

Je te laisse voir si c’est compatible avec tes scripts de customisation.

PS: A l’occasion de la P23 nous avons décidé d’abandonner Tomcat 8.5.x au profit de 9.0.x que nous utilisons en interne depuis des mois. Ce sera effectif lors de la mise à jour du manager de ce soir (ou d’un sim refresh manuel)

Mes scripts de customisation fonctionnent, dans le sens où l’appli est accessible via son URL externe : cf https://rec.bretagne.bzh/alerte.

Ce qui ne fonctionne plus sur l’env de recette, c’est de cliquer depuis l’IHM Web du SIM sur l’URL http://alerte.test-sim.cr-bretagne.fr/alerte. Auparavant, la page de connexion à Crowd s’affichait, tandis que là j’ai une erreur 404.

Ca fonctionne encore en prod:
1/ je suis sur http://prod-sim-3.cr-bretagne.fr/ui
2/ je clique sur le lien vers l’instance affiché par le SIM : http://alerte.prod-sim-3.cr-bretagne.fr/alerte
3/ je suis redirigé vers http://alerte.prod-sim-3.cr-bretagne.fr/alerte/crowd?_provider=crowd
4/ je me loggue et je suis alors sur la bonne URL: https://region.bretagne.bzh/alerte/ui

Pour compléter:

Pour rappel:

Ca doit pas être facile à comprendre sans accès aux machines, je peux arranger ça si besoin.

Déjà qu’est ce que donnent :

Je pose la question pour savoir si on parle d’un pb spécifiquement lié à Crowd ou si on parle d’un pb de “tuyauterie” plus général.

[Platform]
Status=OK
Version=4.0.P23
BuiltOn=2019-05-10 14:15 (revision fc323bb700d2edcda23eb76525df90c64d9cd1d9)
Encoding=UTF-8
EndpointIP=192.168.1.20
EndpointURL=https://Rec-sim:10173/alerte
TimeZone=Europe/Paris
SystemDate=2019-05-14 13:29:43

[Application]
ApplicationVersion=4.0
ContextPath=/alerte
ContextURL=https://rec.bretagne.bzh/alerte
ActiveSessions=1
EnabledUsers=56
TotalUsers=57
LastLoginDate=2019-05-14 10:15:00

[Server]
ServerInfo=Apache Tomcat/8.5.40
ServerType=WEB
User=alerte

[OS]
Name=Linux
Architecture=amd64
Version=3.10.0-957.5.1.el7.x86_64
SystemEncoding=UTF-8

[Disk]
DiskFree=30038
DiskUsable=28436
DiskTotal=37149

[JavaVM]
Version=1.8.0_191
Vendor=Oracle Corporation
VMName=OpenJDK 64-Bit Server VM
VMVersion=25.191-b12
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.10 2018 04 09
HeapFree=209729
HeapSize=245760
HeapMaxSize=466432
TotalFreeSize=430401

[Cache]
GrantCache=1
GrantCacheMax=0
GrantCacheRatio=0
ObjectCache=18
ObjectCacheMax=10000
ObjectCacheRatio=0
ProcessCache=0
ProcessCacheMax=10000
ProcessCacheRatio=0

[Database]
Vendor=2
ProductName=MySQL
ProductVersion=5.5.5-10.2.9-MariaDB-10.2.9+maria~stretch
DriverName=MySQL Connector/J
DriverVersion=mysql-connector-java-8.0.16 (Revision: 34cbc6bc61f72836e26327537a432d6db7c77de6)
DBDate=2019-05-14 13:29:43
DBDateOffset=0
DBPatchLevel=P23
UsingBLOBs=true

[Healthcheck]
Date=2019-05-14 13:29:43
ElapsedTime=250

Du coup j’ai testé sur la prod, les 2 URLs suivantes fonctionnent:

Si /health ne répond pas c’est forcément un pb de “tuyauterie”, pas un pb applicatif.

Je n’ai jamais dit que c’était un pb applicatif, au contraire. Je pense que c’est un pb au niveau de la couche reverse proxy du SIM. Sinon, comment expliquer que https://rec.bretagne.bzh/alerte/health fonctionne tandis que http://alerte.test-sim.cr-bretagne.fr/alerte/health renvoie une erreur 404, sachant que ces 2 URLs pointent vers la même instance Simplicité?

Si j’ai bien suivi ce que vous faites vous n’utilisez pas de reverse proxying au niveau du SIM mais tapez directement sur les ports des connecteurs Tomcat depuis votre reverse proxy.

Bref je pense que le pb est dans la config de votre reserse proxy.

Non le problème ne venait pas de notre reverse proxy, en effet:

  • l’appel à http://alerte.rec-sim.cr-bretagne.fr/alerte/health donnait une erreur 404 alors qu’elle ne passait pas par le reverse proxy mais tapait en direct sur le Nginx
  • ce problème a disparu avec la MAJ de cette nuit sans que nous n’ayons rien touché de notre côté.

Notre config de reverse proxy retransmet les requêtes reçues pour l’appli X sur le domaine bretagne.bzh vers appliX.lebonsim.cr-bretagne.fr/appliX. Elle ne tape pas finalement pas en direct sur le port Tomcat, comme c’était effectivement envisagé au début.

Le reverse proxyiing standard NGINX du SIM ne gère pas les context path non root (/toto). Il ne gère pas non plus les hostnames multiples. Et de toute façon a rien changé sur le SIM récemment sur NGINX.

Je pense que vous avez mis en place votre propre reverse proxiing NGINX pour répondre à vos besoins spécifiques… non ?