Как диагностировать 500 внутренних ошибок сервера на IIS 7.5, когда ничего не записывается в журнал событий?

Я только что развернул обновление на существующем сайте ASP.NET MVC3 (он уже был настроен), и я получаю синий экран IIS с указанием смерти

Ошибка HTTP 500.0 - внутренняя ошибка сервера
Невозможно отобразить страницу, поскольку произошла внутренняя ошибка сервера.

Тем не мение; в журнале событий приложений ничего не отображается, и я ожидаю увидеть (более) подробное описание записи.

Как я могу диагностировать эту проблему?

6 ответов

Решение

Взгляните на функцию отслеживания невыполненных запросов IIS7:

Устранение неполадок с ошибочными запросами при использовании трассировки в IIS 7
Устранение неполадок с отслеживанием невыполненных запросов

Другая вещь, которую я хотел бы сделать, это настроить ваш <httpErrors> настройка, потому что IIS может проглотить сообщение об ошибке из дальнейшего конвейера:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

Если сайт написан на классическом ASP, обязательно включите параметр " Отправить ошибки в браузер" в функции конфигурации ASP:

введите описание изображения здесь

И наконец, если вы используете Internet Explorer, убедитесь, что вы отключили Показывать дружественные сообщения об ошибках HTTP в дополнительных настройках (хотя я подозреваю, что вы уже сделали это или используете другой браузер).

В моем случае:

  • Журнал событий был пуст.
  • web.config не был поврежден - проверено с помощью того же на локальной машине / использование inetmgr

В заключение...

  • Проверка журналов IIS показала такой запрос

...Chrome/57.0.2987.133+Safari/537.36 500 19 5 312

Ключом является:

sc-status sc-substatus sc-win32-status 500 19 5

который с некоторым гуглом указал мне на IIS_USRS не имея разрешения на чтение www папка

Наиболее очевидная проблема - неправильные или нулевые права NTFS на папку веб-приложения. Поэтому убедитесь, что учетная запись, обслуживающая сайт, имеет необходимые разрешения. Без надлежащих прав NTFS на веб-каталог не имеет значения, что вы поместите в файл web.config, поскольку он никогда не будет прочитан.

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

При обновлении с IIS6 это может быть один из web.config, работающий на 6, но не в IIS 7.5 ... Дважды щелкните все значки в IIS для веб-сайта, и вы можете получить сообщение об ошибке формата (раздел должен быть ниже другого раздела...)

У меня была такая же проблема с веб-приложением Azure. При локальной отладке сообщения об ошибках (JSON), возвращаемые из вызовов ajax, полностью возвращались в браузер. Но после развертывания в веб-приложении сообщения были проглочены, и мне было возвращено сообщение об ошибке по умолчанию 500. Поэтому я должен был явно установить existingResponse значение для PassThrough в web.config httpErrors тег.

Я много раз сталкивался с этой проблемой. Ошибка 500 на веб-сайте ASP.NET 4.x. Никакие подробности в журнале событий и даже трассировка выше не помогли. В моем случае это было вызвано тем, что в web.config есть правила перезаписи . Поэтому проверьте свой web.config, если в нем есть что-то вроде:

      <system.webServer>
  <rewrite>
    <rules>
      ...
    </rules>
  </rewrite>
</system.webServer>

Если это так, вам необходимо установить модуль перезаписи iis:

https://www.iis.net/downloads/microsoft/url-rewrite

Другие вопросы по тегам