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?

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

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.