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


10

私は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を使用する必要があります。

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

回答:


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

このディレクティブは、質問の時点では利用できませんでした。バージョン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

0

検索nginxのwikiの約特に一部ProxyModule、私は関連する何かを見つけることができませんでした。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.