nginx como proxy usando um ip de origem específico

7

Estou usando o nginx para exibir arquivos estáticos e fazer proxy de outras solicitações para alguma instância do Tomcat. O problema é que eu não sei como escolher qual endereço IP será usado pelo nginx para se conectar ao Tomcat.

Cada instância do Tomcat aceita apenas conexões HTTP de endereços IP específicos. Meu servidor tem todos esses IPs. Eu simplesmente não posso escolher qual nginx vai usar.

Este é o meu arquivo de configuração:

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

Meu servidor tem uma interface com dois endereços IP: A e B. Eu preciso usar o IP A para se conectar ao primeiro Tomcat e ao IP B para se conectar ao Solr.

Alguém sabe como fazer isso?

    
por msbrogli 18.10.2012 / 08:09

3 respostas

9
A diretiva

proxy_bind permite que você escolha um endereço IP de origem diferente.

link

Assim, sua configuração ficaria assim:

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/;
}
    
por 08.07.2013 / 01:25
1

se o nginx não puder fazer isso, você sempre poderá usar o netfilter e o SNAT para fazer parecer que o nginx estava usando ip específico:

iptables -t nat -A POSTROUTING -p tcp --dport 9080 -d ip_of_your_backend -j SNAT --to one_of_ips_bound_to_nginx_server
    
por 18.10.2012 / 08:39
0

Pesquisando no wiki nginx e especialmente na parte sobre ProxyModule , não encontrei nada relacionado.

Se você tiver a possibilidade de experimentar um pouco, sugiro que tente valores diferentes na diretiva listen e verifique os logs de acesso em seu servidor back-end para ver de onde vem o endereço IP nginx.

    
por 18.10.2012 / 08:24