2011-01-05 68 views
1

假设Apache配置为允许长连接(KeepAlive)。它的超时时间相当长。在Apache中杀死HTTP(S)连接

我们有一些特殊情况,当我们应该强制关闭/杀死这些长期生活的连接(我们不能等到它超时)。

你可以给我一些指针,该怎么做?

我将会理解甚至更多,如果该信息将是 一个)SSL b有用)反向SSL代理

通常,最终的解决方案将是使用SSL和客户端证书的认证的Apache一个。 Apache将作为反向代理工作。我将需要根据客户端证书主题杀死一些连接。

+0

此问题属于serverfault.com,因为它是系统管理员专用的,不涉及编程。 – noodl 2011-01-05 23:25:47

回答

0

回想起来,当我研究这个问题时,我没有找到解决这个问题的现有解决方案。但是,我能够对Apache模块进行原型化,而这正是所描述的(杀死一个长期存在的连接)。

0

保持两个单独的Apache实例运行,1代表SSL不运行。如果使用prefork模型,则可以基于过程生命周期,将旧的PID反馈到kill,该旧的PID具有适当实例的父路径。

不知道你可以内省或获取分叉为每个主题虽然httpd进程的PID ...

+0

谢谢。有趣的想法。然而,我正在寻找更微妙的东西(关闭模块代码中的连接而不是终止正在服务某个客户端的整个过程)。 – 2011-01-05 23:52:22

0

我不知道有长期存活的设置将真正帮助您优化SSL会话。首次连接时会出现SSL会话重叠,我们可以假设它使第一次请求延长了20%。但是,然后在服务器端激活SSL缓存,并且来自同一浏览器的更多SSL请求不会受到SSL关联的影响。

我会推荐5秒Keepalive超时,这通常足以处理页面加载和附加在此页面上的CSS/js /图像。也许你也可以尝试15秒。但是除非你使用COMET persitent连接处理,否则任何更大的对我来说都没有意义。我可能是错的。做一些测试。

请注意,如果您在apache后面执行一些负载均衡器的东西,并且ssl会话缓存不由不同的apache服务器共享,则可能会出现SSL重叠问题。这就是为什么负载均衡器有时会尝试将链接保持在SSL模式下的原因(始终将此人指向该服务器)。但我从来没有读过HTTP Keepalive应该用于SSL优化。

+0

这不完全是出于优化的原因。一般来说,在这种情况下,SSL用于认证/授权原因,并且它作为隧道来允许客户端应用程序与服务器端应用程序对话。某些第三方应用程序可能是客户端应用程序和服务器应用程序,我的Apache只是坐在负责验证和授权的中间位置。第三方客户端和服务器端应用可能会因为自己的原因而使用Keepalive。如果客户端没有被授权,我需要终止连接。 – 2011-01-06 21:19:49

+0

所以你想使SSL会话失效。您可以使用client-> apache连接保持活动时间较短的请求。传入的新请求(每5秒或15秒)SSL会话将保持有效。然后,当授权必须失效时,您需要两件事:删除ssl会话(它在一个文件中),同时阻止将发生的新auth&ssl关联的成功(但如果它是基于数据库或基于LDAP的连接,并且您想破坏现有会话,因为您刚刚使此帐户无效)。 – regilero 2011-01-06 21:35:15