私は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を使用する必要があります。
誰でもそれを行う方法を知っていますか?
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/;
}
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
nginx wiki 、特に ProxyModule に関する部分を検索しても、関連するものは見つかりませんでした。
少し実験する可能性がある場合は、listen
ディレクティブで別の値を試し、バックエンドサーバーのアクセスログを確認して、nginxのIPアドレスが何であるかを確認することをお勧めします。