Я использую nginx для обслуживания статического файла и прокси-сервера других запросов к некоторому экземпляру Tomcat. Проблема в том, что я не знаю, как выбрать, какой IP-адрес будет использовать nginx для подключения к Tomcat.
Каждый экземпляр Tomcat принимает HTTP-соединения только с определенных IP-адресов. У моего сервера есть все эти 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.
Кто-нибудь знает как это сделать?
Директива 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/;
}
если 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 вики и особенно часть о ProxyModule, Ничего связанного не нашел.
Если у вас есть возможность немного поэкспериментировать, я бы посоветовал вам попробовать разные значения в listen
директиву и проверьте журналы доступа на вашем внутреннем сервере, чтобы узнать, с какого IP-адреса исходит nginx.