j'espère que vous pouvez m'aider avec un problème de proxy que j'ai.
Ce que j'ai déjà
J'ai mis en place un proxy inverse Apache http pour les demandes de proxy de * .proxy.domain à * .intern.domain. L'Apache est le seul moyen d'accéder à mes applications Web internes à partir d'un réseau externe.
Exemple:
app.proxy.domain -> app.intern.domain
mail.proxy.domain -> mail.intern.domain
Tout cela fonctionne très bien, mais j'ai le problème suivant.
Problème
Je souhaite envoyer par proxy les demandes suivantes:
app.proxy.domain -> app.internal.domain
app-dev.proxy.domain -> app-dev.internal.domain
Ce n'est pas un problème, mais malheureusement, le serveur app-dev exécute une copie exacte de l'application Web des serveurs d'applications, et cette application Web ne répond qu'à son nom d'hôte (app.intern.domain)
Donc, ce que je dois faire, c'est proxy
app.proxy.domain -> app.internal.domain (10.0.1.1)
app-dev.proxy.domain -> app.internal.domain (10.0.1.2)
Je peux faire la deuxième chose, en ajoutant "10.0.1.2 app.internal.domain" dans/etc/hosts, mais cela signifie également que app.proxy.domain atterrira sur le serveur de développement.
Je recherche une option pour définir l'entrée/etc/hosts uniquement à l'intérieur du fichier de configuration vhost pour app-dev.proxy.domain, de sorte que chaque autre configuration vhost utilise simplement DNS pour app.intern.domain.
Réflexions ...
Existe-t-il un moyen de dire à Apache config,
ProxyPass / http://10.0.1.2/
mais envoyer app.intern.domain comme nom d'hôte?
Modifier l'application web dev-servers pour écouter app-dev n'est pas une option, car il est censé être une copie exacte (pas ma décision ...)
Merci!
Vous pourriez éventuellement utiliser mod_headers en conjonction avec mod_proxy. Je ne l'ai pas testé cependant.
Donc, pour votre vhost app-dev, vous pourriez avoir:
RequestHeader set Host "app.internal.domain"
puis vous ajouteriez:
ProxyPreserveHost On
La solution de contournement laide consiste à utiliser (plutôt: abuser) le/etc/hosts pour pointer app.internal.domain vers localhost, puis configurer Apache pour écouter deux ports supplémentaires, un pour chaque application et app-dev. Donc inverser le proxy deux fois:
Listen 80
Listen 127.0.0.1:8001
Listen 127.0.0.1:8001
<VirtualHost *:80>
ServerName app.proxy.domain
ProxyPass / http://app.internal.domain:8001
</VirtualHost>
<VirtualHost *:80>
ServerName app-dev.proxy.domain
ProxyPass / http://app.internal.domain:8002
</VirtualHost>
<VirtualHost 127.0.0.1:8001>
ServerName app.internal.domain
ProxyPreserveHost On
ProxyPass / http://10.0.1.1/
</VirtualHost>
<VirtualHost 127.0.0.1:8002>
ServerName app.internal.domain
ProxyPreserveHost On
ProxyPass / http://10.0.1.2/
</VirtualHost>
Ajouter à la configuration du proxy inverse (foe app-dev.proxy ..):
RequestHeader edit Host ^app-dev.proxy.domain app.proxy.domain
Vous devez préalablement activer mod_headers:
a2enmod headers
Le serveur interne 10.0.1.2 devrait avoir
ServerName app.proxy.domain