Configuration apache

Bonjour,

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 ?

Bonsoir,
Quelle est ta configuration?

Alors, à l’aveugle, je dirais :

  • 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.

Bonjour,

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)

Il faut activer les modules rewrite, ssl et proxy

config non fonctionnelle

<VirtualHost *:443>
    ServerName host.domain.xyz

     

         ProxyPass /app/1 http://srv.local:46180
	 ProxyPassReverse /app/1 http://srv.local:46180
	
         ProxyPass /app/2 http://srv.local:46181
	 ProxyPassReverse /app/2 http://srv.local:46181

         ProxyPass /app/3 http://srv.local:46182
	 ProxyPassReverse /app/3 http://srv.local:46182


          RewriteRule ^/(.*)$ http://%{SERVER_NAME}/$1 [NE,R,L]

	     ProxyPreserveHost On
	     SSLEngine On
	     SSLProxyEngine on
    SSLCertificateFile      /etc/letsencrypt/live/host.domain.xyz/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/host.domain.xyz/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/host.domain.xyz/chain.pem
</VirtualHost>

@Sputnik93 : je vais essayé d’adapter

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.

par contre la config de @Sputnik93 est correcte

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.

Ah oui, pardon, j’ai mal lu la question initiale, pardon.

1 J'aime

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.

1 J'aime