nginx come proxy usando un IP sorgente specifico


10

Sto usando nginx per servire file statici e inoltrare altre richieste ad alcune istanze Tomcat. Il problema è che non so come scegliere quale indirizzo IP verrà utilizzato da nginx per connettersi a Tomcat.

Ogni istanza Tomcat accetta solo connessioni HTTP da indirizzi IP specifici. Il mio server ha tutti questi IP. Non riesco proprio a scegliere quale utilizzerà Nginx.

Questo è il mio file di configurazione:

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

Il mio server ha un'interfaccia con due indirizzi IP: A e B. Devo usare IP A per connettermi al primo Tomcat e IP B per collegarmi a Solr.

Qualcuno sa come farlo?

Risposte:


11

La direttiva proxy_bind ti consente di scegliere diversi indirizzi IP di origine.

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

Quindi la tua configurazione sarebbe simile a:

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

Questa direttiva non era disponibile al momento della mia domanda. È disponibile dalla versione 0.8.22. Grazie per l'aiuto :)
msbrogli

1

se nginx non può farlo, puoi sempre usare netfilter e SNAT per farlo apparire come nginx stava usando ip specifico:

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

Cercando nel wiki di nginx e specialmente nella parte relativa a ProxyModule , non ho trovato nulla di correlato.

Se hai la possibilità di sperimentare un po ', ti suggerirei di provare diversi valori nella listendirettiva e di controllare i log di accesso sul tuo server back-end per vedere da dove proviene l'indirizzo IP nginx.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.