Проблема
В прошлом месяце мы переместили нашу ферму веб-сайта asp.net с сервера 2008 R2 на сервер 2012 R2 и обновили до asp.net 4.5. Мы используем аутентификацию с использованием файлов cookie для предотвращения несанкционированного доступа к веб-сайту.
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
У нас есть определенные ресурсы и страницы (например: страница входа), которые отмечены белым цветом в файле web.config:
<location path="signin">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
В течение последних нескольких месяцев мы замечаем, что IIS/Asp.net случайно перестает подчиняться "белым" и предполагает, что все должно быть аутентифицировано. Все запросы на сайт на этом сервере будут перенаправлены на страницу с подписью, которая затем выдает ошибку 500. Белые активы не могут быть восстановлены.
Есть 2 ошибки в средстве просмотра событий, которые мы видим, когда IIS запутался. Первое:
Exception type: NullReferenceException
Exception message: Object reference not set to an instance of an object.
at System.Web.PipelineModuleStepContainer.GetNextEvent(RequestNotification notification, Boolean isPostEvent, Int32 eventIndex)
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
Этот второй не отображается все время:
Event code: 4005
Event message: Forms authentication failed for the request. Reason: The ticket supplied has expired.
Процесс iis будет работать находкой в течение нескольких часов, а затем внезапно начнет делать эту странность. Как только мы переработаем пул приложений или даже изменим web.config, сайт снова начнет работать.
Что мы пробовали
Честно говоря, мы совершенно тупики. Это не происходило на наших старых серверах, но с тех пор мы сделали немало изменений на нашем сайте, но ничего не связано с аутентификацией.
-
Мы находимся в webfarm и определяем наш машинный ключ внутри нашего web.config.
<machineKey validationKey="XXX" decryptionKey="XXX" validation="SHA1" decryption="AES" />
-
Мы нацеливаем asp.net 4.5
<httpRuntime targetFramework="4.5" executionTimeout="120" maxQueryStringLength="4096" minFreeThreads="72" minLocalRequestFreeThreads="88" maxRequestLength="32768" />
-
Мы воссоздали пул приложений в IIS.
- Не уверен, что это важно, но мы используем общую конфигурацию IIS и общие сертификаты.
- Проблема происходит на всех веб-серверах в ферме, а не только на одном.
- Мы переустановили ОС на одном из серверов вчера... поэтому мы увидим, что это что-то исправить.
- Это не похоже на использование памяти. Иногда iis использует только 4gb, иногда 6gb.
- Он, похоже, не привязан к определенному исполнению страницы, которое мы можем сказать.
- Я запустил debug diag против дампа памяти, и нет ни одного потока, который работает долго и не использует сумасшедшую память.
Да, мы в тупике. Любая помощь приветствуется.