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?

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

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.