Подробное сообщение об ошибке 500, ASP + IIS 7.5

192

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

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

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

egidiocs
источник
Я использую другой способ регистрации ошибок в текстовом файле: stackoverflow.com/questions/20475502/… Основное отличие - информация об ошибках будет храниться в текстовом файле
Zam

Ответы:

231

Я пришел к той же проблеме и установил точно так же , как Alex K .

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

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

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

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

Вацлав Элиас
источник
9
Если это все еще не работает, отключите дружественные сообщения об ошибках http
Тим Партридж
3
Если «Страницы ошибок» отсутствует на панели, убедитесь , что функция включена: Включите для Windows или отключение компонентов => WWW Services, Общие функции HTTP, [х] Ошибки HTTP
Фиат
1
@fiat Чтобы включить «Сообщения об ошибках», я должен был пойти: Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Джесс Телфорд
Примечание. «Страницы ошибок» и «Страницы ошибок .NET» различаются. Вы специально хотите "Страницы ошибок" .
Джесс Телфорд
@JessTelford HOW-TOдля NET ошибок страниц ?
Kiquenet
94

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

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

safhac
источник
1
На самом деле, <system.webserver>в моем случае настроек было достаточно, спасибо.
Марапет
4
system.webServerРаздел читается IIS 7+ даже при запуске классический ASP
Тим Льюис
2
customErrors mode = "Off" сделал это для меня
spankmaster79
больше нет необходимости использовать customErrors(например, IIS 7+, ASP.NET, Classic AppPool
Kiquenet
49

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

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

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

Алекс К.
источник
Может быть, применимо к IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (веб-формы) с CLASSIC AppPool (НЕ интегрировано)
Kiquenet
43

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

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

Тим Партридж
источник
20

В web.config под

<system.webServer>

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

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

с участием

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

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

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

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

Niente00
источник
1
Для пользовательского эквивалента Power Shell запустите:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz
20

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

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

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

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

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

IIS Default 500 error

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

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

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

В этом случае вы видите настройку < httpErrors > или в IIS Manager это страницы ошибок -> Изменить настройки функций. По умолчанию для этого используется errorMode = DetailLocalOnly на уровне узла сервера (в отличие от уровня сайта), что означает, что, хотя вы увидите эту настроенную страницу ошибок, пока удаленно, вы сможете локально войти на сервер и увидеть полный ошибка, которая должна выглядеть примерно так:

Подробная ошибка HTTP

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

«Но я не вижу подробных ошибок даже при просмотре на сервере»

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

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

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

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

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

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

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

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

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

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

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

т.е. дружеские ошибки 1

или это...

т.е. дружеские ошибки 2

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

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

Пользовательские ошибки включены

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

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

b_levitt
источник
9

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

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
Дана Бенсон
источник
2
customErrors для asp.net. Ошибки HTTPE предназначены для IIS7, поэтому они обрабатывают контент, который не проходит через обработчик .net (например, .png, .js и т. д.). Если вам нужны страницы ошибок для типов контента, отличных от .NET, используйте страницы ошибок IIS (httpErrors для IIS7 , пользовательский интерфейс для IIS6.) Атрибут customErrors используется, когда код .net вызывает исключение (404, 403, 500 и т. д.), а атрибут httpErrors используется, когда сам IIS создает исключение. Это связано с тем, что по умолчанию IIS7 перехватывает коды состояния HTTP, такие как 4xx и 5xx, сгенерированные приложениями далее по конвейеру.
Kiquenet
6

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

RandomUs1r
источник
1
Это если выбран третий вариант, видимый в ответе Вацлава .
Риксмт
3

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

Рожерио Барретто
источник
3

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

Джон Кётер
источник
1

Если вы запустите браузер на сервере и протестируете свой URL проекта с локальным IP-адресом, вы получите все ошибки этого проекта без страницы общих ошибок (например, страница 500 ошибок).

Али Расули
источник