nginx comme proxy à l'aide d'une adresse IP source spécifique

10

J'utilise nginx pour servir un fichier statique et proxy d'autres demandes à une instance Tomcat. Le problème est que je ne sais pas comment choisir l'adresse IP que nginx utilisera pour se connecter à Tomcat.

Chaque instance de Tomcat n'accepte que les connexions HTTP provenant d'adresses IP spécifiques. Mon serveur possède toutes ces adresses IP. Je ne peux simplement pas choisir lequel utilisera nginx.

Voici mon fichier de configuration:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location /integracao/ {
    proxy_pass http://X.X.X.X:9080/integracao/;
}

location /solr/ {
    proxy_pass http://Y.Y.Y.Y:8080/solr/;
}

Mon serveur a une interface avec deux adresses IP: A et B. Je dois utiliser IP A pour me connecter au premier Tomcat et IP B pour me connecter à Solr.

Quelqu'un sait-il comment le faire?

msbrogli
la source

Réponses:

11

La directive proxy_bind vous permet de choisir une adresse IP source différente.

http://wiki.nginx.org/HttpProxyModule#proxy_bind

Votre configuration ressemblerait donc à:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location /integracao/ {
    proxy_bind A.A.A.A;
    proxy_pass http://X.X.X.X:9080/integracao/;
}

location /solr/ {
    proxy_bind B.B.B.B;
    proxy_pass http://Y.Y.Y.Y:8080/solr/;
}
Nopius
la source
Cette directive n'était pas disponible au moment de ma question. Il est disponible depuis la version 0.8.22. Merci pour votre aide :)
msbrogli
1

si nginx ne peut pas le faire, vous pouvez toujours utiliser netfilter et SNAT pour le faire apparaître comme si nginx utilisait une ip spécifique:

iptables -t nat -A POSTROUTING -p tcp --dport 9080 -d ip_of_your_backend -j SNAT --to one_of_ips_bound_to_nginx_server
pQd
la source
0

En parcourant le wiki nginx et en particulier la partie sur ProxyModule , je n'ai rien trouvé de similaire.

Si vous avez la possibilité d'expérimenter un peu, je vous suggère d'essayer différentes valeurs dans la listendirective et de vérifier les journaux d'accès sur votre serveur principal pour voir de quelle adresse IP nginx provient.

pkhamre
la source