nginx в качестве прокси с использованием определенного исходного IP

10

Я использую 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.

Кто-нибудь знает, как это сделать?

msbrogli
источник

Ответы:

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/;
}
Nopius
источник
Эта директива не была доступна на момент моего вопроса. Он доступен с версии 0.8.22. Спасибо за вашу помощь :)
msbrogli
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
PQD
источник
0

Просматривая вики nginx и особенно часть о ProxyModule , я не нашел ничего связанного.

Если у вас есть возможность немного поэкспериментировать, я бы посоветовал вам попробовать другие значения в listenдирективе и проверить журналы доступа на вашем внутреннем сервере, чтобы увидеть, с какого IP-адреса приходит nginx.

pkhamre
источник