Message d'erreur 500 détaillé, ASP + IIS 7.5

192

IIS 7.5, 2008rc2, asp classique, 500 msg d'erreur:

La page ne peut pas être affichée car une erreur de serveur interne s'est produite.

J'ai besoin de savoir comment configurer IIS pour obtenir une erreur plus détaillée.
J'ai essayé de définir sur true toutes les options de débogage dans la configuration ASP.
Mais cela n'a pas fonctionné. Quelqu'un peut-il m'aider?

egidiocs
la source
J'utilise une méthode différente pour enregistrer une erreur dans un fichier texte: stackoverflow.com/questions/20475502/… Différence principale - les informations d'erreur seront stockées dans un fichier texte
Zam

Réponses:

231

Je suis venu au même problème et fixe la même manière que Alex K .

Donc, si "Envoyer les erreurs au navigateur" ne fonctionne pas, définissez également ceci:

Pages d'erreur -> 500 -> Modifier les paramètres des fonctionnalités -> "Erreurs détaillées"

entrez la description de l'image ici

Notez également que si le contenu de la page d'erreur renvoyée est assez court et que vous utilisez IE, IE ignorera volontiers le contenu utile renvoyé par le serveur et vous montrera à la place sa propre page d'erreur générique. Vous pouvez désactiver cette option dans les options d'IE ou utiliser un autre navigateur.

Vaclav Elias
la source
9
Si cela ne fonctionne toujours pas, désactivez les messages d'erreur http conviviaux
Tim Partridge
3
Si "Error Pages" est absent de votre panneau, assurez-vous que la fonctionnalité est activée: Activer ou désactiver les fonctionnalités Windows => Services WWW, Fonctionnalités HTTP communes, [x] Erreurs HTTP
fiat
1
@fiat Pour activer « une page d' erreur », je devais aller: Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford
Remarque: «Pages d'erreur» et «Pages d'erreur .NET» sont différentes. Vous voulez spécifiquement des "Pages d'erreur" .
Jess Telford
@JessTelford HOW-TOpour les pages d'erreur NET ?
Kiquenet
94

Si vous êtes sur un serveur distant, vous pouvez configurer votre fichier web.config comme ceci:

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

safhac
la source
1
En fait, les <system.webserver>paramètres étaient suffisants dans mon cas, merci.
marapet
4
La system.webServersection est lue par IIS 7+ même lors de l'exécution d'ASP classique
Tim Lewis
2
customErrors mode = "Off" l'a fait pour moi
spankmaster79
il n'est plus nécessaire d'utiliser customErrors(par exemple IIS 7+, ASP.NET, Classic AppPool ) tedgustaf.com/blog/2011/5/…
Kiquenet
49

Double-cliquez sur "ASP" dans l'écran d'accueil du site dans l'administration IIS, développez "Propriétés de débogage", activez "Envoyer les erreurs au navigateur" et cliquez sur "Appliquer".

Sous "Pages d'erreur" sur l'écran d'accueil, sélectionnez "500", puis "Modifier les paramètres des fonctionnalités" et sélectionnez "Erreurs détaillées".

Notez que les mêmes étapes s'appliquent à IIS 8.0 (Windows Server 2012).

Alex K.
la source
Peut-être s'applique à IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) avec CLASSIC AppPool (NON intégré)
Kiquenet
43

Après avoir essayé la réponse de Vaclav et Alex , je devais toujours désactiver "Afficher les messages d'erreur HTTP conviviaux" dans IE

entrez la description de l'image ici

Tim Partridge
la source
20

Dans web.config sous

<system.webServer>

remplacer (ou ajouter) la ligne

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

avec

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

Cela est dû au fait que, par défaut, IIS7 intercepte les codes d'état HTTP tels que 4xx et 5xx générés par des applications plus haut dans le pipeline.

Ensuite, activez « Envoyer les erreurs au navigateur » dans la section «ASP», et sous « Pages d'erreur / Modifier les paramètres des fonctionnalités », sélectionnez «Erreurs détaillées».

En outre, donner des autorisations Ecrire sur le dossier du site Web aux IIS_IUSRS BUILTIN groupe.

Niente00
la source
1
Pour l'équivalent utilisateur de Power Shell, exécutez:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz
20

TLDR: Déterminez d'abord où dans le pipeline vous obtenez l'erreur (faites défiler la recherche pour des captures d'écran de quelque chose qui ressemble à votre erreur), apportez des modifications pour obtenir quelque chose de nouveau, répétez.

Déterminez d'abord le message d'erreur que vous voyez réellement.

Si vous voyez le fichier situé ici ...

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

... qui ressemble généralement à ceci:

Erreur IIS par défaut 500

... alors vous savez que vous voyez la page d'erreur actuellement configurée dans ** IIS ** et que vous n'avez PAS besoin de modifier le paramètre d'ASP.net customErrors, le paramètre de détail d'erreur asp ou le paramètre de navigateur "Afficher les erreurs http conviviales".

Vous voudrez peut-être regarder le chemin référencé ci-dessus au lieu de faire confiance à ma capture d'écran au cas où quelqu'un la modifierait.

"Oui, je vois l'erreur décrite ci-dessus ..."

Dans ce cas, vous voyez le paramètre < httpErrors > ou dans IIS Manager, c'est Error Pages -> Edit Feature Settings. La valeur par défaut pour cela est errorMode = DetailedLocalOnly au niveau du nœud du serveur (par opposition au niveau du site), ce qui signifie que même si vous verrez cette page d'erreur configurée à distance, vous devriez pouvoir vous connecter localement au serveur et voir l'intégralité erreur qui devrait ressembler à ceci:

Erreur HTTP détaillée

Vous devriez avoir tout ce dont vous avez besoin à ce stade pour corriger l'erreur actuelle.

"Mais je ne vois pas l'erreur détaillée même en naviguant sur le serveur"

Cela laisse quelques possibilités.

  1. Le navigateur que vous utilisez sur le serveur est configuré pour utiliser un proxy dans ses paramètres de connexion afin qu'il ne soit pas considéré comme «local».
  2. Vous ne naviguez pas réellement vers le site sur lequel vous pensez naviguer - cela se produit généralement lorsqu'un équilibreur de charge est impliqué. Faites une vérification ping pour voir si dns vous donne une adresse IP sur le serveur ou ailleurs.
  3. Les paramètres httpErrors de votre site sont définis sur "Personnalisé" uniquement. Changez-le en "DetailedLocalOnly". Cependant, si vous rencontrez une erreur de configuration, cela peut ne pas fonctionner car le niveau de site httpErrors est également un élément de configuration. Dans ce cas, passez au n ° 4
  4. La valeur par défaut de httpErrors pour tous les sites est définie sur "Personnalisé". Dans ce cas, vous devez cliquer sur le nœud de serveur de niveau supérieur dans le Gestionnaire des services Internet (et non sur un site particulier) et modifier les paramètres httpErrors en DétailléLocalOnly. S'il s'agit d'un serveur interne et que vous ne craignez pas de divulguer des informations sensibles, vous pouvez également le définir sur "Détaillé", ce qui vous permettra de voir l'erreur provenant de clients autres que le serveur.
  5. Il vous manque un module sur le serveur comme UrlRewrite (celui-ci me mord beaucoup, et il donne souvent le message générique quels que soient les paramètres de httpErrors).

"La connexion au serveur n'est pas une option pour moi"

Modifiez les httpErrors de votre site en "Détaillé" afin de pouvoir le voir à distance. Mais si cela ne fonctionne pas, votre erreur peut déjà être une erreur de configuration, voir # 3 immédiatement ci-dessus. Vous pourriez donc être coincé avec le n ° 4 ou le n ° 5 et vous aurez besoin de quelqu'un de votre équipe serveur.

"Je ne vois pas la page d'erreur décrite ci-dessus. Je vois quelque chose de différent"

Si vous voyez ceci ...

entrez la description de l'image ici

... et vous vous attendez à voir quelque chose comme ça ...

entrez la description de l'image ici

... alors vous devez changer «Envoyer les erreurs au navigateur» sur true dans le Gestionnaire des services Internet (IIS), sous Site -> IIS -> ASP -> Propriétés de débogage

Si vous voyez ceci ...

ie erreurs amicales 1

ou ca...

ie erreurs amicales 2

... vous devez désactiver les erreurs conviviales dans votre navigateur ou utiliser la vue Web de Fiddler pour regarder la réponse réelle par rapport à ce que votre navigateur choisit de vous montrer.

Si vous voyez ceci ...

Erreurs personnalisées activées

... alors les erreurs personnalisées fonctionnent mais vous n'avez pas de page d'erreur personnalisée (bien sûr, à ce stade, nous parlions de .net et non d'asp classique). Vous devez changer votre balise customErrors dans votre web.config en RemoteOnly pour afficher sur le serveur, ou Off pour afficher à distance.

Si vous voyez quelque chose qui ressemble à votre site, alors les erreurs personnalisées sont probablement On ou RemoteOnly et cela affiche la page personnalisée (Views-> Shared-> Error.cshtml dans MVC par exemple). Cela dit, il est peu probable mais possible que quelqu'un ait changé les pages dans IIS pour httpErrors, alors voyez la première section à ce sujet.

b_levitt
la source
9

essayez de définir la valeur de l'attribut httpErrors "existingResponse" sur "PassThrough". Le mien était réglé sur "Remplacer", ce qui empêchait l'affichage du YSOD.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
Dana Benson
la source
2
customErrors sont pour asp.net. httpErrors sont pour IIS7, et donc gérer le contenu qui ne passe pas par le gestionnaire .net (par exemple .png, .js, etc.) Si vous voulez des pages d'erreur pour les types de contenu non -.net, utilisez les pages d'erreur IIS (httpErrors pour IIS7 , l'interface utilisateur pour IIS6.) L'attribut customErrors est utilisé lorsque le code .net lève une exception (404, 403, 500, etc.) et l'attribut httpErrors est utilisé lorsque IIS lui-même lève une exception. Cela est dû au fait que, par défaut, IIS7 intercepte les codes d'état HTTP tels que 4xx et 5xx générés par des applications plus haut dans le pipeline.
Kiquenet
6

Une chose que personne n'a mentionnée est comme une solution très rapide et temporaire, vous pouvez afficher l'erreur sur l'hôte local de ce serveur Web.

RandomUs1r
la source
1
C'est si la troisième option visible dans la réponse de Vaclav est sélectionnée.
ricksmt
3

Vous pouvez également vérifier que si vous avez modifié votre dossier de site Web principal ( c:\inetpub\wwwroot) vers un autre dossier, vous devez accorder l'autorisation de lecture au groupe IIS_IUSRS dans le nouveau dossier.

Rogerio Barretto
la source
3

Pour les personnes qui ont TOUT essayé et qui ne peuvent tout simplement pas afficher les détails de l'erreur, comme moi, c'est une bonne idée de vérifier les différents niveaux de configuration. J'ai un fichier de configuration au niveau du site Web et au niveau de l'application (à l'intérieur du site Web), vérifiez les deux. De plus, il s'est avéré que les erreurs détaillées étaient désactivées sur le nœud le plus élevé d'IIS (juste en dessous de la page de démarrage, il a le nom qui est le même que le nom de l'ordinateur du serveur Web). Vérifiez les pages d'erreur là-bas.

Jon Koeter
la source
1

Si vous exécutez le navigateur sur le serveur et testez votre URL du projet avec l'adresse IP locale, vous avez reçu toutes les erreurs de ce projet sans une page d'erreur générale (par exemple, une page d'erreur 500).

Ali Rasouli
la source