nginx como proxy usando una fuente ip específica

10

Estoy usando nginx para servir archivos estáticos y otras solicitudes de proxy a alguna instancia de Tomcat. El problema es que no sé cómo elegir qué dirección IP usará nginx para conectarse a Tomcat.

Cada instancia de Tomcat solo acepta conexiones HTTP de direcciones IP específicas. Mi servidor tiene todas estas IP. Simplemente no puedo elegir cuál usará nginx.

Este es mi archivo de configuración:

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

Mi servidor tiene una interfaz con dos direcciones IP: A y B. Necesito usar IP A para conectarme primero a Tomcat e IP B para conectarme a Solr.

¿Alguien sabe cómo hacerlo?

msbrogli
fuente

Respuestas:

11

La directiva proxy_bind le permite elegir diferentes direcciones IP de origen.

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

Entonces su configuración se vería así:

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/;
}
Nopio
fuente
Esta directiva no estaba disponible en el momento de mi pregunta. Está disponible desde la versión 0.8.22. Gracias por tu ayuda :)
msbrogli
1

Si nginx no puede hacerlo, siempre puede usar netfilter y SNAT para que parezca que nginx estaba usando una IP específica:

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
fuente
0

Al buscar en el wiki de nginx y especialmente en la parte sobre ProxyModule , no encontré nada relacionado.

Si tiene la posibilidad de experimentar un poco, le sugiero que pruebe diferentes valores en la listendirectiva y verifique los registros de acceso en su servidor back-end para ver de qué dirección IP proviene nginx.

pkhamre
fuente