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


10

我正在使用nginx提供静态文件并将其他请求代理到某些Tomcat实例。问题是我不知道如何选择nginx用于连接到Tomcat的IP地址。

每个Tomcat实例仅接受来自特定IP地址的HTTP连接。我的服务器具有所有这些IP。我只是无法选择nginx使用哪个。

这是我的配置文件:

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

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

有人知道怎么做吗?

Answers:


11

proxy_bind指令允许您选择其他源IP地址。

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

因此您的配置如下所示:

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

在我提出问题时,此指令不可用。从0.8.22版本开始可用。感谢您的帮助:)
msbrogli 2013年

1

如果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

0

搜索nginx Wiki,尤其是有关ProxyModule的部分,我没有发现任何相关信息。

如果您可以尝试一下,我建议您在listen指令中尝试不同的值,并检查后端服务器上的访问日志,以了解nginx的IP地址来自何处。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.