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?

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/;
}

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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.