1

我使用 Delphi2007 和 Indy10 创建了一个网络服务器。

服务器最初运行良好,但一段时间后(通常在 8 到 48 小时之间)DoMaxConnectionsExceeded方法开始触发;我的网络服务器不再正常工作。目前我将MaxConnections设置为 500。我过去曾尝试更改此设置。而且似乎值越大,Web 服务器的寿命就越长。所以这让我觉得连接没有被释放。

  1. 我在实例化中做错了吗?为什么连接不被释放?
  2. 有没有办法获取所有连接的列表(通过这样做我可以检查 IP 地址,看看它是否可能是 DOS 攻击)。还有一种方法来获取他们试图点击的网址?
  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

0

发现出了什么问题。虽然我在 idHTTPServer 组件上将 KeepAlive 设置为 false,但在另一个区域,我在 ResponseInfo 上手动设置它:

  Aresponseinfo.Connection:='keep-alive';
于 2013-06-20T02:46:47.820 回答