Детальне повідомлення про помилку 500, ASP + IIS 7.5


192

IIS 7.5, 2008rc2, класичний asp, 500 помилок, мсг:

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

Мені потрібно знати, як налаштувати IIS, щоб отримати більш детальну помилку.
Я спробував встановити вірні всі параметри налагодження в конфігурації ASP.
Але це не спрацювало. Хтось може мені допомогти?


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

Відповіді:


231

Я прийшов до тієї ж проблеми і встановив точно так же , як Alex K .

Отже, якщо "Надіслати помилки браузеру" не працює, встановіть також це:

Сторінки помилок -> 500 -> Редагувати параметри функції -> "Детальні помилки"

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

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



3
Якщо на Вашій панелі відсутній "Сторінки помилок", переконайтеся, що функція включена: Увімкніть або вимкніть функції Windows => Послуги WWW, загальні функції HTTP, [x] Помилки 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-сторінок помилок ?
Кікенет

94

Якщо ви перебуваєте на віддаленому сервері, ви можете налаштувати файл web.config так:

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


1
Власне, <system.webserver>в моєму випадку налаштувань було достатньо, дякую.
марапет

4
system.webServerРозділ читається IIS 7 + навіть при запуску класичний ASP
Тім Льюіс

2
customErrors mode = "Вимкнено" зробив це для мене
spankmaster79

більше не потрібно використовувати customErrors(наприклад, IIS 7+, ASP.NET, Classic AppPool ) tedgustaf.com/blog/2011/5/…
Kiquenet

49

Двічі клацніть "ASP" на головному екрані сайту в адміністраторі IIS, розгорніть "Властивості налагодження", увімкніть "Надіслати помилки браузеру" та натисніть "Застосувати".

У розділі "Сторінки помилок" на головному екрані виберіть "500", потім "Редагувати параметри функції" та виберіть "Детальні помилки".

Зауважте, що ті ж дії застосовуються і для IIS 8.0 (Windows Server 2012).


Можливо, стосується IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) з CLASSIC AppPool (не інтегрований)
Kiquenet


20

У web.config під

<system.webServer>

замінити (або додати) рядок

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

з

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

Це відбувається тому, що за замовчуванням IIS7 перехоплює коди статусу HTTP, такі як 4xx та 5xx, згенеровані додатками, що продовжують роботу.

Далі увімкніть " Надіслати помилки в браузер " у розділі "ASP", а в розділі " Сторінки помилок / Редагувати параметри функції " виберіть "Детальні помилки".

Крім того, надайте дозволи на запис у папці веб-сайту вбудованій групі IIS_IUSRS .


1
Для еквівалента користувачеві оболонки запустіть:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz

20

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

Спочатку визначте, яке повідомлення про помилку ви насправді бачите.

Якщо ви бачите файл, розташований тут ...

% SystemDrive% \ inetpub \ custerr \\ 500.htm

... що зазвичай виглядає так:

Помилка 500 стандартних стандартів IIS

... тоді ви знаєте, що у ** IIS ** ви бачите поточно налаштовану сторінку помилок, і вам НЕ потрібно змінювати налаштування ASP.net customErrors, налаштування деталей помилок asp або налаштування браузера "показувати дружні помилки http".

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

"Так, я бачу описану вище помилку ..."

У цьому випадку ви бачите налаштування < httpErrors > або в IIS Manager це сторінки помилок -> Редагувати параметри функції. Типовою умовою для цього є errorMode = DetailedLocalOnly на рівні вузла сервера (на відміну від рівня сайту), що означає, що ви будете бачити цю налаштовану сторінку помилок під час віддаленого доступу, ви повинні мати можливість увійти локально на сервер і побачити повну помилка, яка має виглядати приблизно так:

Детальна помилка HTTP

Ви повинні мати все, що вам потрібно, щоб виправити поточну помилку.

"Але я не бачу детальної помилки навіть при перегляді на сервері"

Це залишає пару можливостей.

  1. Веб-браузер, який ви використовуєте на сервері, налаштований на використання проксі-сервера в налаштуваннях підключення, тому він не сприймається як "локальний".
  2. Ви насправді не переглядаєте той веб-сайт, на який ви думаєте, що переглядаєте - це часто трапляється, коли є балансир навантаження. Зробіть перевірку ping, щоб побачити, чи dns дає вам IP на сервері чи десь ще.
  3. Налаштування httpErrors для вашого веб-сайту встановлено лише для "Custom". Змініть його на "DetailedLocalOnly". Однак якщо у вас є помилка конфігурації, це може не працювати, оскільки httpErrors на рівні сайту також є елементом конфігурації. У такому випадку переходите до №4
  4. За замовчуванням для httpErrors для всіх сайтів встановлено "Custom". У цьому випадку вам потрібно натиснути вузол сервера верхнього рівня в IIS Manager (а не конкретному сайті) та змінити там налаштування httpErrors на DetailedLocalOnly. Якщо це внутрішній сервер і ви не переживаєте про розкриття конфіденційної інформації, ви також можете встановити його на "Детально", що дозволить побачити помилку від інших клієнтів, крім сервера.
  5. Вам не вистачає такого модуля на сервері, як UrlRewrite (цей мене дуже кусає, і він часто дає загальне повідомлення незалежно від налаштувань httpErrors).

"Вхід на сервер - це не варіант для мене"

Змініть httpErrors вашого сайту на "Детально", щоб ви могли його бачити віддалено. Але якщо це не працює, ваша помилка може вже бути помилкою конфігурації, дивіться №3 безпосередньо вище. Таким чином, ви можете застрягти з №4 або №5, і вам знадобиться хтось із вашої команди сервера.

"Я не бачу описаної вище сторінки помилок. Я бачу щось інше"

Якщо ви бачите це ...

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

... і ви очікуєте побачити щось подібне ...

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

... тоді вам потрібно змінити "Надіслати помилки в браузері" на "Істинне" в Менеджері IIS, в розділі Сайт -> IIS -> ASP -> Властивості налагодження

Якщо ви бачите це ...

тобто дружні помилки 1

або це ...

тобто дружні помилки 2

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

Якщо ви бачите це ...

Вмикаються спеціальні помилки

... тоді користувацькі помилки працюють, але у вас немає користувальницької сторінки помилок (звичайно, в цей момент говорили про .net, а не про класичний asp). Потрібно змінити свій тег customErrors у веб-конфізі на RemoteOnly для перегляду на сервері або Вимкнено, щоб переглянути дистанційно.

Якщо ви бачите щось у стилі вашого веб-сайту, то ймовірні помилки, ймовірно, увімкнено або віддалено, і на ньому відображається користувацька сторінка (наприклад, Перегляд-> Спільний-> Помилка.cshtml у MVC). Однак це навряд чи можливо, що хтось змінив сторінки в IIS для httpErrors, тому дивіться перший розділ про це.


9

спробуйте встановити значення атрибута httpErrors "існуючийResponse" для "PassThrough". Шахта була встановлена ​​на "Замінити", через що YSOD не відображався.

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

2
customErrors призначені для asp.net. httpErrors призначені для IIS7, і тому обробляйте вміст, який не проходить через обробник .net (наприклад, .png, .js тощо). Якщо ви хочете сторінки помилок для типів вмісту, які не є.net, використовуйте сторінки помилок IIS (httpErrors для IIS7 , інтерфейс користувача для IIS6.) Атрибут customErrors використовується, коли код .net кидає виняток (404, 403, 500 тощо), а атрибут httpErrors використовується, коли IIS сам викидає виняток. Це відбувається тому, що за замовчуванням IIS7 перехоплює коди статусу HTTP, такі як 4xx та 5xx, згенеровані додатками, що продовжують роботу.
Кікенет

6

Одне, про що ніхто не згадує, - це дуже швидке та тимчасове виправлення, ви можете переглянути помилку на localhost цього веб-сервера.


1
Ось якщо буде обраний третій варіант, видимий у відповіді Вацлава .
ricksmt

3

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


3

Люди, які спробували ВСЕ, і просто НЕ МОЖУТЬ отримати детальну інформацію про помилку, щоб показати, як я, це гарна ідея перевірити різні рівні конфігурації. У мене є конфігураційний файл на рівні веб-сайту та на рівні програми (всередині веб-сайту). Крім того, як виявилося, у мене було вимкнено докладні помилки на найвищому вузлі в IIS (безпосередньо під початковою сторінкою, воно має ім'я, яке відповідає імені комп'ютера веб-серверів). Перевірте там сторінки помилок.



1

Якщо ви запустите браузер на сервері і протестуєте URL-адресу проекту з локальним ip, ви отримали всі помилки цього проекту без загальної сторінки помилок (наприклад, 500 помилок).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.