Подробное сообщение об ошибке 500, ASP + IIS 7.5 - PullRequest
180 голосов
/ 14 апреля 2010

IIS 7.5, 2008rc2, классический asp, ошибка 500, msg:

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

Мне нужно знать, как настроить IIS для получения более подробной ошибки.
Я попытался установить в true все параметры отладки в конфигурации ASP.
Но это не сработало. Кто-нибудь может мне помочь?

Ответы [ 12 ]

219 голосов
/ 04 мая 2010

Я пришел к той же проблеме и исправил так же, как Алекс К .

Так что, если «Отправить ошибки в браузер» не работает, установите также это:

Страницы ошибок -> 500 -> Изменить параметры функции -> «Подробные ошибки»

enter image description here

Также обратите внимание, что если содержимое страницы с ошибкой, отправленной обратно, довольно короткое, и вы используете IE, IE с радостью проигнорирует полезный контент, отправленный обратно сервером, и покажет вам свою собственную общую страницу ошибок. Вы можете отключить это в настройках IE или использовать другой браузер.

88 голосов
/ 17 января 2011

Если вы находитесь на удаленном сервере, вы можете настроить файл web.config следующим образом:

<configuration>
<system.webServer>
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>
</system.webServer>
<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
</system.web>

46 голосов
/ 15 апреля 2010

Дважды щелкните «ASP» на главном экране сайта в IIS admin, разверните «Свойства отладки», включите «Отправить ошибки в браузер» и нажмите «Применить».

В разделе «Страницы ошибок» на главном экране выберите «500», затем «Редактировать настройки функций» и выберите «Подробные ошибки».

Обратите внимание, что те же шаги применимы к IIS 8.0 (Windows Server 2012).

42 голосов
/ 21 февраля 2013

После попытки ответа Вацлава и Алекса мне все равно пришлось отключить "Показывать дружественные сообщения об ошибках HTTP" в IE

enter image description here

19 голосов
/ 26 сентября 2014

В web.config в

<system.webServer>

заменить (или добавить) строку

<httpErrors errorMode="Detailed"></httpErrors>

с

<httpErrors existingResponse="PassThrough" errorMode="Detailed"></httpErrors>

Это связано с тем, что по умолчанию IIS7 перехватывает коды состояния HTTP, такие как 4xx и 5xx, сгенерированные приложениями далее по конвейеру.

Далее, включите « Отправлять ошибки в браузер » в разделе «ASP», а в разделе « Страницы ошибок / Изменить параметры функции » выберите «Подробные ошибки».

Кроме того, предоставьте разрешения на запись в папку веб-сайта для встроенной группы IIS_IUSRS .

12 голосов
/ 30 июня 2017

TLDR: сначала определите, откуда в конвейере вы получаете ошибку (прокрутите, ища скриншоты чего-то, что напоминает вашу ошибку), внесите изменения, чтобы получить что-то новое, повторите.

Сначала определите, какое сообщение об ошибке вы видите на самом деле.

Если вы видите файл, расположенный здесь ...

% SystemDrive% \ Inetpub \ custerr \\ 500.htm

... который обычно выглядит так:

IIS Default 500 error

... тогда вы знаете, что видите текущую настроенную страницу ошибки в ** IIS **, и вам НЕ нужно изменять настройку customErrors, подробности об ошибке asp или «показать дружественные ошибки http "настройка браузера.

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

«Да, я вижу вышеописанную ошибку ...»

В этом случае вы видите настройку <<a href="https://www.iis.net/configreference/system.webserver/httperrors" rel="noreferrer"> httpErrors > или в IIS Manager это Страницы ошибок -> Изменить настройки функций. По умолчанию для этого используется errorMode = DetailLocalOnly на уровне серверного узла (в отличие от уровня сайта) , что означает, что, пока вы будете видеть эту настроенную страницу ошибок, будучи удаленной, вы сможете локально войти в сервер и увидеть полную ошибку, которая должна выглядеть примерно так:

Detailed HTTP Error

У вас должно быть все, что вам нужно, чтобы исправить текущую ошибку.

"Но я не вижу подробной ошибки даже при просмотре на сервере"

Это оставляет пару возможностей.

  1. Браузер, который вы используете на сервере, настроен на использование прокси в настройках соединения, поэтому он не рассматривается как "локальный".
  2. Вы на самом деле не просматриваете сайт, на котором, как вы думаете, вы его просматриваете - это обычно происходит, когда задействован балансировщик нагрузки. Выполните проверку ping, чтобы узнать, дает ли dns IP-адрес на сервере или где-то еще.
  3. Настройки вашего сайта httpErrors установлены только для "Пользовательского". Измените его на «DetailLocalOnly». Однако, если у вас есть ошибка конфигурации, это может не сработать, поскольку httpErrors уровня сайта также является элементом конфигурации. В этом случае перейдите к # 4
  4. По умолчанию для httpErrors для всех сайтов установлено значение «Пользовательский». В этом случае вам нужно щелкнуть по узлу сервера верхнего уровня в диспетчере IIS (а не по конкретному сайту) и изменить настройки httpErrors там на DetailLocalOnly. Если это внутренний сервер и вы не беспокоитесь о разглашении конфиденциальной информации, вы также можете установить для него значение «Подробно», что позволит вам увидеть ошибку от клиентов, отличных от сервера.

"Вход на сервер для меня не вариант"

Измените httpErrors вашего сайта на "Подробно", чтобы вы могли видеть его удаленно. Но если это не сработает, ваша ошибка уже может быть ошибкой конфигурации, см. № 3 непосредственно выше. Так что, возможно, вы застряли на # 4, и вам понадобится кто-то из вашей серверной команды.

"Я не вижу страницу ошибки, описанную выше. Я вижу что-то другое"

Если вы видите это ...

enter image description here

... и вы ожидаете увидеть что-то подобное ...

enter image description here

... тогда вам нужно изменить "Отправить ошибки браузеру" на true в IIS Manager, в разделе Сайт -> IIS -> ASP -> Свойства отладки

Если вы видите это ...

ie friendly errors 1

или это ...

ie friendly errors 2

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

Если вы видите это ...

Custom errors enabled

... тогда пользовательские ошибки работают, но у вас нет пользовательской страницы ошибок (конечно, в этот момент речь шла о .net, а не о классическом asp). Вам необходимо изменить тег customErrors в файле web.config на RemoteOnly для просмотра на сервере или Off для удаленного просмотра.

Если вы видите что-то в стиле вашего сайта, то, скорее всего, пользовательские ошибки включены или RemoteOnly, и он отображает пользовательскую страницу (например, Views-> Shared-> Error.cshtml в MVC). Тем не менее, маловероятно, но возможно, что кто-то изменил страницы в IIS для httpErrors, так что смотрите первый раздел об этом.

9 голосов
/ 26 августа 2011

попробуйте установить значение атрибута httpErrors «существующий ответ» «PassThrough».У меня был установлен параметр «Заменить», из-за чего YSOD не отображался.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
6 голосов
/ 11 апреля 2013

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

3 голосов
/ 30 мая 2011

Вы также можете убедиться, что если вы изменили папку основного веб-сайта (c:\inetpub\wwwroot) на другую папку, вы должны дать разрешение на чтение для группы IIS_IUSRS в новой папке.

2 голосов
/ 13 февраля 2017

Для людей, которые пробовали ВСЕ и просто НЕ МОГУТ получить подробную информацию об ошибке, чтобы показать, как я, это хорошая идея, чтобы проверить различные уровни конфигурации. У меня есть файл конфигурации на уровне веб-сайта и на уровне приложения (внутри веб-сайта), проверьте оба. Кроме того, как оказалось, у меня были отключены подробные ошибки на самом высоком узле в IIS (прямо под стартовой страницей, имя которого совпадает с именем компьютера веб-сервера). Проверьте страницы ошибок там.

...