2017-11-04 2 views
2

私はHibernate、Jackson、および4つまたは5つの1つのサーバーでのみ異常な動作を示している他のライブラリの長いリストを持つSpring 4.2.3 MVCアプリケーションを持っています他のほぼ同一のサーバーは正常に動作します。このアプリケーションは、Java 8のTomcat 7で動作します。多くの同時リクエストを伴うSpring MVC/Tomcatでの異常な動作

@RestControllerコントローラは、@PreAuthorizeを使用して、各要求をエンドポイントに認可します。ユーザーが403(Forbidden)応答を返す要求されたアクセス許可が不足している場合、そのセッションは無効になり、以降のすべての要求はそのユーザーが再び認証されるまで401(Unauthorized)を返します。

問題のサーバーは、ユーザーがすべての必要なアクセス許可を持っている場合、自発的に403を返します。私たちの権限評価者は、ユーザーに権限がないときにログを記録します。この場合、例外を含めて何もログに記録しません。サーバーは、複数の403応答を返すだけでなく、401応答を返します。さらに、403のレスポンスはデフォルトのApache/Tomcat出力ですが、ユーザーに表示される従来のシナリオでは403という基本HTMLページを返すようSpringを設定しています。このことが原因で、Springアプリケーションの外に、おそらくTomcatの中に問題があると思うようになります。

クライアントは、同じエンドポイントに最大42のHTTP要求を送信することができます(最大42)。最初の30分は200 OKを返し、次の12はすべて403を返します。自発的な403を抑制できるのは、42を4つのHTTP要求に統合することです。この統合は、問題に関係なく良いことですが、ここでの作業の仕組みを理解したいと思います。サーバーが処理できるリクエストの数がわからない場合、私はそれを信用できません。

私の考えでは、これまで以下のとおりです。

  1. DOSの保護は、私があまりにも多くの要求を同時に持っていることを決定し、少なくともリソース集中型の方法で応答
  2. Tomcatはスレッド制限を打つとで反応に建てられ、いくつかの望ましくない方法

いくつかのうち1つのサーバーでこの現象が発生する可能性があるのは何ですか?

+0

ログに403リクエストが表示されますか?そしてそこに情報? –

+0

@ TarunLalwani Apache 403レスポンスのHTMLがダンプされた状態で、アプリケーションによって記録されたエラーが表示されます。私たちのアプリケーションはデフォルトの403応答を持っていますが、これはそうではありませんので、アプリケーションコードが実行される前に問題が発生していると仮定しましたが、 – tomfumb

+0

Webサーバーが傍受し、独自のエラーページを表示すると、エラーページが異なっています。しかし、アプリケーションログで403に気づいたのは、それが実際にアプリケーション自体によって引き起こされたことを示しています。私たちはプロジェクトで同様の状況に気付いていましたが、外部システムと接続していて、並列クライアント数に制限があり、それは403に変換されていました。拒否される外部サービスへの他の接続 –

答えて

1

問題はApacheのmod_evasiveモジュールでした。問題のサーバーはDoS/DDoS保護で構成されていたため、外部で使用できました。この正確な動作を提供するためにmod_evasiveが存在します。Apacheは設定に基づいてリクエストが多すぎると、403レスポンスを低リソースショートカットとして返します。

関連する問題