Назад | Перейти на главную страницу

IIS WebLimits не соблюдается

Итак, я настроил IIS8.5 на Win 8.1, вот так:

appcmd.exe set config -section:system.applicationHost/webLimits /connectionTimeout:"00:00:03" /commit:apphost

Я проверил, что настройки применены.

Я сделал IISRESET (в отчаянии), но этот параметр, похоже, игнорируется.

Если я подключаюсь к IIS через Telnet и не отправляю никакого контента, я не отключаюсь через 3 секунды, как ожидалось.

Я фактически начал все это, пытаясь заставить это работать:

appcmd.exe set config -section:system.applicationHost/webLimits /headerWaitTimeout:"00:00:30" /commit:apphost

то есть, чтобы он отключил меня после того, как не отправил все заголовки через 30 секунд. Это тоже не сработало - оставайся на связи столько, сколько захочу.

Я читал документы (http://www.iis.net/configreference/system.applicationhost/weblimits) и вполне уверен, что семантика верна.

Почему не применяется лимит?

Спасибо.

Прежде всего, я обнаружил, что вам действительно нужно выполнить 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

Документация на

http://www.iis.net/configreference/system.applicationhost/weblimits

говорит:

Каждые 60 секунд рабочий процесс проверяет, как долго он простаивал. Если его текущее время простоя больше, чем значение тайм-аута простоя, указанное службой активации процессов Windows (WAS), рабочий процесс инициирует завершение работы.

Теперь, когда процесс проверяет каждые 60 секунд, тогда - ах - 3 или 30 секундный тайм-аут не имеет смысла, потому что в любом случае он проверяется только каждые 60 секунд. В любом случае это не имеет особого смысла, поскольку позволяет обходить попытки поддержки активности HTTP 1.1, чтобы избежать накладных расходов на повторное установление.