J’ai apache qui me sers de reverse proxy.
Seul le port 443 est ouvert.
J’ai plusieurs apps qui sont disponibles sur les ports 33001,33002,33003,…
Je voudrais n’utiliser qu’un seul domaine.
Pour faire simple, on aurait :
127.0.0.1:33001 → domaine/app1/
127.0.0.1:33002 → domaine/app2/
127.0.0.1:33003 → domaine/app3/
Jusque là, je n’ai pas réussi à faire quelque chose de fonctionnel.
Au mieux, j’arrive à pointer sur la page d’accueil, mais dés que je change de page, je n’arrive pas à gérer les redirections.
par exemple:
domaine/app1/ en cliquant sur le lien page2 qui devrait correspondre à domaine/app1/page2
j’arrive sur domaine/page2/
J’ai du mal à m’y retrouvé avec les différentes possibilités d’apache.
Quel serait la solution la plus simple ?
ajouter les ports en question dans le fichier /etc/apache2/ports.conf
créer des configurations pour les sites en question dans le dossier /etc/apache2/sites-available/ (tu peux prendre en base les fichiers déjà en service en modifiant le numéro de port dans la liste <VirtualHost address:port>
activer les sites à l’aide de la commande a2ensite
redémarrer le service apache
Si tu as un pare-feu, n’oublie pas de le configurer correctement pour que les sites soient accessibles là où il doivent l’être.
tu peux nous montrer ton fichier de configuration apache ?
J’utilise ce genre de config, dans des cas similaires:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
ServerAdmin blabla
ServerSignature off
Documentroot /var/www
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine On
RequestHeader set X-Forwarded-Protocol "https"
Header edit Location ^http://(.*)$ https://$1
ProxyPass /app1 http://localhost:port_app1
ProxyPassReverse /app1 http://localhost:port_app1
<Location /app1>
# toutes directives utiles pour l'appli
Order deny,allow
Allow from all
</Location>
ProxyPass /app2 http://localhost:port_app2
ProxyPassReverse /app2 http://localhost:port_app2
<Location /app1>
# toutes directives utiles pour l'appli 2
Order deny,allow
Allow from all
</Location>
SSLEngine On
SSLCertificateFile blablabla
SSLCertificateKeyFile blablabla
SSLCertificateChainFile blablabla
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"
ErrorLog /var/log/apache2/blabla.com.log
LogLevel warn
CustomLog /var/log/apache2/blabla.com.log combined
</VirtualHost>
# modern configuration, tweak to your needs
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
En fait non, seul le proxy doit être accessible, donc 443. Les site derrière justement ne doivent pas être accessible, car c’est le but du reverse proxy d’être en frontal: empêcher d’aller directement sur les sites.
Pour les accès aux différentes ressources des applis, il faut parfois voir au cas par cas, les applis en backend n’ont pas forcément toutes la même façon d’exposer leurs ressources.
Quand un accès à une ressource ne fonctionne pas comme tu voudrais, va voir tout de suite l’access.log, tu verras les chemins des ressources demandées et ça te donnera probablement un indice sur le problème (parfois ça peut être un trailing slash manquant dans les directives ProxyPass et ProxyPassReverse par exemple).
PS: là on est sur apache, mais j’ai plutôt tendance à utiliser nginx pour faire un Reverse Proxy.
J’ai pas réussi à trouver la bonne config.
C’est une bonne idée de regarder ce qui se passe dans les logs.
L’appli me sors des liens commençant par « / » et me renvoie logiquement à la racine du serveur.
J’en déduis que je dois me baser sur l’url courante pour réécrire les liens et au final pointer au bon endroit.
Par contre, je pense qu’en terme de fonctionnalités nginx et apache doivent être équivalent sur ce point. J’imagine que c’est plus une question d’habitude et de connaissances personnelles
Je pense aussi, en tout cas pour des connexions en nombre raisonnable. Après, j’ai parfois lu que nginx est conçu comme un reverse proxy qui peut faire office de serveur web, et qu’apache est un serveur web qui peut servir de reverse proxy, et que cette différence joue sur les performances, mais avec mes petits volumes je ne pense pas que la différence soit remarquable.
C’est pour ça que j’utilise HAproxy pour les reverse proxy.
Ainsi je cloisonne l’applicatif d’un coté sur apache ou nginx, et la partie reverse proxy avec HAproxy.
en plus si ensuite je dois séparer les deux, c’est plus facile.
en plus, cela décorrèle aussi toute la partie sécurité.
Oui, dans le même esprit, j’utilise le RP (nginx) exposé sur Internet, alors que l’applicatif (et l’éventuel serveur apache local) est en DMZ. nginx offre nativement des fonctionnalités d’équilibrage de charge et de failover, un peu comme HAproxy ou Keepalived.