1

Delphi2007 と Indy10 を使用して Web サーバーを作成しました。

サーバーは最初は正常に動作しますが、しばらくすると (通常は 8 ~ 48 時間)、DoMaxConnectionsExceededメソッドが起動し始めます。Web サーバーが正常に動作しなくなりました。現在、MaxConnectionsを 500 に設定しています。過去にこの設定を変更して実験しました。また、値が大きいほど、Web サーバーの存続期間が長くなるようです。だから、接続が解放されていないと思います。

  1. インスタンス化で何か間違ったことをしていますか? 接続が解放されないのはなぜですか?
  2. すべての接続のリストを取得する方法はありますか (これを行うことで、IP アドレスを確認し、DOS 攻撃であるかどうかを確認できます)。また、ヒットしようとしている URL を取得する方法はありますか?
  3. また、 KeepAliveプロパティを変更せず に実験しました。
  4. MaxConnectionsを 0に設定する必要がありますか?

TIdHTTPServer をインスタンス化するためのソース コード:

IdHTTPServer1 := TIdHTTPServer.Create;
IdHTTPServer1.MaxConnections := 500;
IdHTTPServer1.AutoStartSession := True;
IdHTTPServer1.KeepAlive := FGlobalKeepAlive;
IdHTTPServer1.SessionState := True;
IdHTTPServer1.OnCommandGet := IdHTTPServer1CommandGet;
IdHTTPServer1.onexception := IdHttpServerexception;
IdHTTPServer1.onlistenexception := IdHttpServerlistenexception;
idHttpServer1.ParseParams := True;
idHttpServer1.OnQuerySSLPort := QuerySSLPort;
idHttpServer1.IOHandler := ServerIOHandler;
idHttpServer1.Bindings.Add.Port := 80;
idHttpServer1.Bindings.Add.Port := 443;
IdHTTPServer1.Active := True;

更新- 追加したいのですが、SSL に関連している可能性があります。SSL を必要としない同様の Indy ベースの Web サーバーがあります。定期的に失敗することはありますが、それほど頻繁に失敗することはありません。しかし、これらではDoMaxConnectionsExceededをログに記録していません。このイベントの追跡を追加して、maxconnections を超えたことが原因で失敗するかどうか、いつ失敗するかを確認します。

4

1 に答える 1