nginx sebagai proxy menggunakan ip sumber tertentu

10

Saya menggunakan nginx untuk melayani file statis dan proksi permintaan lainnya ke beberapa instance Tomcat. Masalahnya adalah saya tidak tahu bagaimana memilih alamat IP mana yang akan digunakan nginx untuk terhubung ke Tomcat.

Setiap instance Tomcat hanya menerima koneksi HTTP dari alamat IP tertentu. Server saya memiliki semua IP ini. Saya tidak bisa memilih mana yang akan digunakan nginx.

Ini adalah file konfigurasi saya:

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

Server saya memiliki satu antarmuka dengan dua alamat IP: A dan B. Saya perlu menggunakan IP A untuk terhubung ke Tomcat pertama dan IP B untuk terhubung ke Solr.

Adakah yang tahu bagaimana melakukannya?

msbrogli
sumber

Jawaban:

11

proxy_bind direktif memungkinkan Anda untuk memilih alamat IP sumber yang berbeda.

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

Jadi konfigurasi Anda akan terlihat seperti:

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
sumber
Arahan ini tidak tersedia pada saat pertanyaan saya. Ini tersedia sejak versi 0.8.22. Terima kasih atas bantuan Anda :)
msbrogli
1

jika nginx tidak dapat melakukannya Anda selalu dapat menggunakan netfilter dan SNAT untuk membuatnya tampak seperti nginx menggunakan ip tertentu:

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

Mencari melalui wiki nginx dan terutama bagian tentang ProxyModule , saya tidak menemukan apa pun yang terkait.

Jika Anda memiliki kemungkinan untuk bereksperimen sedikit, saya akan menyarankan Anda mencoba nilai yang berbeda dalam listenarahan dan memeriksa log akses di server backend Anda untuk melihat apa yang berasal dari alamat IP nginx.

pkhamre
sumber