Voici un exemple de configuration permettant d'avoir un frontend Apache ou Nginx, un backend Tomcat (ou autre) et le tout avec une connexion sécurisée SSL.
Un frontend Apache ou Nginx en mode proxy avec un backend Tomcat, rien de plus commun, une simple configuration comme celle-ci suffit à obtenir le résultat souhaité dans la conf virtualhost d'Apache ou de Nginx.
Pour Apache:
<VirtualHost *:80> ServerName mondomaine.fr ... ProxyPass / http://localhost:8080 ProxyPassReverse / http://localhost:8080 ... </VirtualHost>
Pour Nginx:
server { server_name mondomaine.fr; listen 80; location / { include proxy_params; proxy_pass http://localhost:8080; } }
Pour la connexion SSL, une modification doit être faite dans la configuration server.xml du Tomcat.
Il est nécessaire de définir un nouveau connector pour la connexion sécurisée.
<Connector connectionTimeout="20000" port="6443" protocol="HTTP/1.1" scheme="https" secure="true" proxyPort="443" proxyName="mondomaine.fr" />
Il faut définir un port d'écoute (6443), le "scheme" https, la valeur true à la propriété "secure", le port du serveur proxy (dans la conf apache / nginx) et enfin le nom du domaine associé (dans la conf apache / nginx).
Pour terminer, la conf à faire dans le virtualhost apache / nginx
Pour apache:
<VirtualHost *:443> ServerName mondomaine.fr ... SSLEngine on SSLCertificateFile "C:\Certbot\live\mondomaine.fr\fullchain.pem" SSLCertificateKeyFile "C:\Certbot\live\mondomaine.fr\privkey.pem" ... ProxyPass / http://localhost:6443 ProxyPassReverse / http://localhost:6443 ... </VirtualHost>
Pour nginx:
server { server_name mondomaine.fr; location / { include proxy_params; proxy_pass http://localhost:6443; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/mondomaine.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mondomaine.fr/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; }
Attention, la configuration du serveur proxy s'effectue bien en HTTP, mais sur le port 6443.
Seule la connexion au frontend est sécurisée (avec le monde extérieur).
Celle entre le frontend et le backend n'a pas besoin de l'être puisqu'ils sont sur le même serveur.