web-dev-qa-db-ja.com

Tomcat7で接続が拒否されました

Jelasticで実行されているTomcatインスタンスがあり、「/ foo」コンテキスト用と「/ bar」コンテキスト用の2つのデプロイ済みアプリがあります。

'/ foo'へのリクエストの処理中に、 '/ bar'(承認用)へのHTTPリクエストを実行しますが、ここには常に例外があります-ConnectException:ConnectionRefused。

ブラウザまたはローカルPCで実行されているコードから「/ bar」に接続すると、すべてが完全に機能します。また、サーバーから( '/ foo'へのリクエストの処理中に)別の場所にあるホストに接続すると、すべてが期待どおりに機能します。 Tomcatはどういうわけか同じホストからの着信接続をフィルタリングしているようです。誰かがそれをどうするか知っていますか?

5
Nik Matveev

「接続が拒否されました」というメッセージは、トランスポートレベルでネットワーク接続を開くことができなかったことを意味します。これは、通信しようとしているサービスが、接続の試行で使用された特定のIPおよびポート番号で新しい接続をリッスンしていないことを意味している可能性があります。

小切手:

  1. 拒否されているリクエストが正しいIPとポート番号を使用していること。
  2. TomcatサービスがそのIPとポートでリッスンするように適切に構成されていること。

システムには複数のIPアドレスがある可能性があり、使用するIPアドレスごとにリッスンする必要があることに注意してください。また、「ローカルホスト」は通常、異なるIPアドレスであることに注意してください。

次に、上記のどちらも問題ではない場合:

  1. ネットワークレベルまたはローカルファイアウォールがトラフィックをブロックする可能性がある場合は、それを確認してください。
  2. 複雑な仮想ネットワークによる「ストレンジネス」の可能性がある場合は、それを確認してください。

Tomcatはどういうわけか同じホストからの着信接続をフィルタリングしているようです。

Tomcatはそのように「フィルタリング」しません。ただし、要求をリッスンするようにTomcatを構成していない可能性は十分にあります。 「server.xml」ファイルをチェックして、正しく構成されているかどうかを確認してください。


FWIW-これはTomcat7CSRFフィルターではないと思います。ドキュメントによると、それはHTTP応答を返します。実際、受信側のTomcat内で、そもそも接続をリッスンしない以外の方法で「接続が拒否された」状態を生成する方法がわかりません。

3
Stephen C

接続が拒否されたということは、間違いなくネットワークの問題を意味します。考えられる理由の1つは、アプリケーションがhttpヘッダー「Host」値などを使用して接続を確立しようとし、一般にヘッダー「Host」値に文字列内に8080ポートが含まれていないことです。ただし、JelasticのTomcatはポート8080で実行されています。ポート8080を強制的に指定して2番目のアプリケーションに接続してみるか、サポートに連絡して、すべてのリクエスト(Tomcatコンテナ内)を80から8080ポートにリダイレクトするiptablesルールを設定するように依頼できます。

1
Anton