10

Webサーバー(ssl-> apache-> jettyで構成されている)で、400BadRequestエラーコードを含むマルチパートアップロードPOSTリクエストをランダムに拒否する問題が発生しています。apacheエラーログ(情報レベル)には、次の2つのエラーが表示されます。

[info] [client x1.y1.z1.w1] (70007)The timeout specified has expired: SSL input filter read failed.
[error] proxy: pass request body failed to x.y.z.w:8087 from x1.y1.z1.w1
[info] [client x1.y1.z1.w1] Connection closed to child 74 with standard shutdown

また

[info] [client x2.y2.z2.w2] (70014)End of file found: SSL input filter read failed.
[error] proxy: pass request body failed to x.y.z.w:8087 from x2.y2.z2.w2
[info] [client x2.y2.z2.w2] Connection closed to child 209 with standard shutdown

どちらの場合も、クライアント側で400BadRequestが発生します。Jettyサーバーは、apache側で拒否されることを意味するリクエストを認識しない場合もあれば、拒否されるためだけに処理を開始する場合もあります(これは、UploadFilterでMultipartExceptionとして表示されます)

フォールバック負荷分散スキームを使用するようにmod_proxyが設定されていますが、ログにはフォールバックがまだトリガーされていないことが示されているため、これが問題の原因ではないと思われます。

SetEnv proxy-sendcl 1を設定しようとしましたが、何も変わりませんでした。

アップロードリクエストは約1MBです。これらのマルチパートファイルのPOSTリクエストのみが失敗し、同時に複数のGETリクエストが着信し、常に期待どおりに機能します。

誰かがアドバイスや提案を共有することができれば、私は非常に感謝しています!ありがとうございました

4

4 に答える 4

2

Tomcat などの ajp 対応のバックエンド サーバーを使用している場合は、mod_proxy_http の代わりに mod_proxy_ajp を使用してみてください。重いアップロードアプリで同様の問題が発生し、変更して修正しました

ProxyPass /myapp http://localhost:8080/myapp
ProxyPassReverse /myapp http://localhost:8080/myapp

ProxyPass /myapp ajp://localhost:8009/myapp
ProxyPassReverse /myapp ajp://localhost:8009/myapp

もちろん、Tomcat 側で ajp コネクタを有効にすることも必要です。

それが役に立てば幸い!

于 2015-05-08T13:41:25.877 に答える
1

これを確認してください:https ://issues.apache.org/bugzilla/show_bug.cgi?id = 44592

この問題は、低速のクライアント(tcp遅延、低速の要求本文の作成など)との確立された接続を切断するHTTPキープアライブ(KeepAliveTimeoutディレクティブ)が原因である可能性があります。

apache confでKeepAliveTimeoutを上げてみてください。ただし、サーバー(DOS)の強制終了を避けるために、KeepAliveTimeoutを高くしすぎないでください。

于 2012-12-18T15:55:06.883 に答える