nginx作为代理使用特定的源IP

我正在使用nginx提供静态文件和代理其他请求到一些Tomcat实例。 问题是我不知道如何selectnginx使用哪个IP地址连接到Tomcat。

每个Tomcat实例只接受来自特定IP地址的HTTP连接。 我的服务器有所有这些IP。 我只是不能selectnginx将使用哪一个。

这是我的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://XXXX:9080/integracao/; } location /solr/ { proxy_pass http://YYYY:8080/solr/; } 

我的服务器有一个接口,带有两个IP地址:A和B.我需要使用IP A连接到第一个Tomcat和IP B以连接到Solr。

有谁知道如何做到这一点?

proxy_bind指令允许你select不同的源IP地址。

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

所以你的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_bind AAAA; proxy_pass http://XXXX:9080/integracao/; } location /solr/ { proxy_bind BBBB; proxy_pass http://YYYY:8080/solr/; } 

如果nginx不能这样做,你总是可以使用netfilter和SNAT使它看起来像nginx使用特定的ip:

 iptables -t nat -A POSTROUTING -p tcp --dport 9080 -d ip_of_your_backend -j SNAT --to one_of_ips_bound_to_nginx_server 

通过nginx维基search,特别是关于ProxyModule的部分,我没有find任何相关的东西。

如果您有可能尝试一下,我build议您在listen指令中尝试不同的值,并检查后端服务器上的访问日志,以查看来自哪个IP地址的nginx。