nginx als Proxy unter Verwendung einer bestimmten Quell-IP

10

Ich verwende nginx, um statische Datei- und Proxy-Anforderungen an eine Tomcat-Instanz zu senden. Das Problem ist, dass ich nicht weiß, wie ich auswählen soll, welche IP-Adresse nginx verwendet, um eine Verbindung zu Tomcat herzustellen.

Jede Tomcat-Instanz akzeptiert nur HTTP-Verbindungen von bestimmten IP-Adressen. Mein Server hat alle diese IPs. Ich kann mich einfach nicht entscheiden, welches Nginx verwendet.

Dies ist meine Konfigurationsdatei:

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

Mein Server verfügt über eine Schnittstelle mit zwei IP-Adressen: A und B. Ich muss IP A verwenden, um eine Verbindung zu Tomcat herzustellen, und IP B, um eine Verbindung zu Solr herzustellen.

Weiß jemand, wie es geht?

msbrogli
quelle

Antworten:

11

Mit der Anweisung proxy_bind können Sie eine andere Quell-IP-Adresse auswählen.

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

Ihre Konfiguration würde also folgendermaßen aussehen:

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
quelle
Diese Richtlinie war zum Zeitpunkt meiner Frage nicht verfügbar. Es ist seit Version 0.8.22 verfügbar. Vielen Dank für Ihre Hilfe :)
msbrogli
1

Wenn Nginx dies nicht kann, können Sie immer Netfilter und SNAT verwenden, um den Eindruck zu erwecken, dass Nginx eine bestimmte IP-Adresse verwendet hat:

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
quelle
0

Beim Durchsuchen des Nginx- Wikis und insbesondere des Teils über ProxyModule habe ich nichts Ähnliches gefunden .

Wenn Sie die Möglichkeit haben, ein wenig zu experimentieren, würde ich vorschlagen, dass Sie verschiedene Werte in der listenDirektive ausprobieren und die Zugriffsprotokolle auf Ihrem Backend-Server überprüfen, um festzustellen, von welcher IP-Adresse nginx stammt.

pkhamre
quelle