web-dev-qa-db-ja.com

特定のソースIPを使用するプロキシとしてのnginx

私はnginxを使用して静的ファイルを提供し、他のリクエストを一部のTomcatインスタンスにプロキシしています。問題は、Tomcatへの接続にnginxが使用するIPアドレスを選択する方法がわからないことです。

各Tomcatインスタンスは、特定のIPアドレスからのHTTP接続のみを受け入れます。私のサーバーにはこれらすべての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/;
}

私のサーバーには、AとBの2つのIPアドレスを持つ1つのインターフェースがあります。最初のTomcatに接続するにはIP A、Solrに接続するにはIP Bを使用する必要があります。

誰でもそれを行う方法を知っていますか?

10
msbrogli

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

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
1
pQd

nginx wiki 、特に ProxyModule に関する部分を検索しても、関連するものは見つかりませんでした。

少し実験する可能性がある場合は、listenディレクティブで別の値を試し、バックエンドサーバーのアクセスログを確認して、nginxのIPアドレスが何であるかを確認することをお勧めします。

0
pkhamre