2017-09-08 4 views
1

J'ai eu un problème ici, ce qui peut sembler anodin, mais mes connaissances de base en matière de configuration d'apache et de tout ce que j'ai cherché aujourd'hui ne m'ont pas permis de trouver une solution satisfaisante. J'ai deux serveurs physiques, et j'exécute deux applications sur chacune d'entre elles: une contenue dans une instance node.js, joignable et répondante sur le port 4200 et une autre contenue dans Tomcat sur le port 8080 (respectivement mon frontal et mon back-end).Apache Httpd - Comment proxy-rediriger deux hôtes virtuels en fonction du chemin d'accès à l'URL de demande?

Les requêtes du client http arrivent sur le serveur de noeud via le port 80 et j'ai configuré un httpd pour les rediriger vers les deux instances en fonction du chemin après l'URL.

Le comportement cible est que httpd redirige toutes les demandes à l'instance de noeud par défaut, et redirige vers la tomcat à distance les demandes correspondant à la structure suivante: physical_server_ip/api/*

Alors, voici ce que j'inclus dans mon httpd .conf sur le serveur d'hébergement instance de nœud et httpd:

<VirtualHost *:80> 
      #Filter on '/api/' path in url for node instance 
      ProxyPass /api/ ! 
      ProxyPass/http://localhost:4200/ 
      ProxyPassReverse/http://localhost:4200/ 
      ProxyPreserveHost On 
    </VirtualHost> 

    <VirtualHost *:80> 
      # Proxy to remote machine on which tomcat runs and provides services 
      ProxyPass /api/ http://<tomcat_machine_alias>:8080/xd-service/api/ 
      ProxyPassReverse /api/ http://<tomcat_machine_alias>:8080/xd-service/api/ 
      ProxyPreserveHost On 
    </VirtualHost> 

Quand je demande ma machine de noeud par Apache, je peux voir la réponse du premier bloc (l'instance de nœud), mais les demandes d'autres (ceux dont le chemin commence avec/api /) pas.

Dans la console du navigateur, il apparaît que ceux-ci (les requêtes conçues pour interroger les API) ne sont pas envoyés par apache et sont envoyés à l'instance de nœud et non à Tomcat.

Qu'est-ce qui me manque?

+0

Fusionnez-les en un 'VirtualHost', avec deux ensembles de règles' ProxyPass (Reverse) ', avec un ensemble plus spécifique en haut –

+0

Cela a parfaitement fonctionné! Merci pour le conseil et pour m'avoir fait comprendre la séquence de filtre plus spécifique -> moins spécifique! – jaknichan

Répondre

0

La réponse de Dusan Bajic a résolu le problème: les deux ensembles de règles de proxy devaient être fusionnés dans un hôte virtuel, du plus spécifique au moins spécifique.