因此我在 Win 8.1 上配置了 IIS8.5,如下所示:
appcmd.exe set config -section:system.applicationHost/webLimits /connectionTimeout:"00:00:03" /commit:apphost
我已经验证该设置已应用。
我已经完成了 IISRESET(绝望中),但设置似乎被忽略了。
如果我通过 telnet 连接到 IIS 但不发送任何内容,则不会像预期的那样在 3 秒后断开连接。
我实际上是通过尝试让它发挥作用来开始这一切的:
appcmd.exe set config -section:system.applicationHost/webLimits /headerWaitTimeout:"00:00:30" /commit:apphost
即,如果 30 秒后没有发送所有标头,它会断开我的连接。这也不起作用 - 只要我喜欢,它就会保持连接。
我已经阅读了文档(http://www.iis.net/configreference/system.applicationhost/weblimits) 并且相当确信语义是正确的。
为什么没有应用该限制?
谢谢。
答案1
首先,我发现您必须实际执行 HTTP 请求才能使连接超时启动,例如输入。
telnet <webserver> 80
GET / HTTP/1.0
Connection: keep-alive
一旦设置完毕,我发现system.applicationHost/webLimit/connectionTimeout不起作用,但是system.applicationHost/sites/[默认网站]/limits/connectionTimeout确实可以正常工作。可以通过 IIS 控制台或使用 appcmd.exe 进行设置,如下所示:
appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.connectionTimeout:00:00:03" /commit:apphost
https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/limits
答案2
文档位于
http://www.iis.net/configreference/system.applicationhost/weblimits
说:
每隔 60 秒,工作进程会检查其空闲时间。如果其当前空闲时间大于 Windows Process Activation Service (WAS) 指定的空闲超时值,则工作进程将启动关闭。
现在,当进程每 60 秒检查一次时,那么 - 啊 - 3 秒或 30 秒超时就毫无意义了,因为它反正每 60 秒才检查一次。它反正没什么意义,因为它绕过了 HTTP 1.1 保持连接尝试以避免重建开销。