Messaggio di errore 500 dettagliato, ASP + IIS 7.5


192

IIS 7.5, 2008rc2, asp classico, errore 500 msg:

La pagina non può essere visualizzata perché si è verificato un errore interno del server.

Devo sapere come configurare IIS per ottenere un errore più dettagliato.
Ho provato a impostare su true tutte le opzioni di debug nella configurazione ASP.
Ma non ha funzionato. Qualcuno può aiutarmi?


Sto usando un modo diverso per registrare l'errore nel file di testo: stackoverflow.com/questions/20475502/… Differenza principale: le informazioni sull'errore verranno memorizzate nel file di testo
Zam,

Risposte:


231

Sono venuto per lo stesso problema e ha fissato l' stesso modo di Alex K .

Quindi, se "Invia errori al browser" non funziona, impostare anche questo:

Pagine di errore -> 500 -> Modifica impostazioni funzionalità -> "Errori dettagliati"

inserisci qui la descrizione dell'immagine

Si noti inoltre che se il contenuto della pagina di errore inviata è piuttosto breve e si utilizza IE, IE ignorerà felicemente il contenuto utile inviato dal server e mostrerà invece la propria pagina di errore generica. Puoi disattivarlo nelle opzioni di IE o utilizzare un browser diverso.



3
Se nel pannello mancano le "Pagine di errore", assicurati che la funzione sia abilitata: attiva o disattiva le funzionalità di Windows => Servizi WWW, Funzioni HTTP comuni, [x] Errori HTTP
fiat

1
@fiat Per abilitare "Errore Pagine", dovevo andare: Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford,

Nota: "Pagine di errore" e "Pagine di errore .NET" sono diverse. Si desidera in particolare "Pagine di errore" .
Jess Telford,

@JessTelford HOW-TOper pagine di errore NET ?
Kiquenet,

94

Se sei su un server remoto puoi configurare il tuo file web.config in questo modo:

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


1
In realtà, le <system.webserver>impostazioni erano sufficienti nel mio caso, grazie.
marapet,

4
La system.webServersezione viene letta da IIS 7+ anche quando si esegue ASP classico
Tim Lewis il

2
customErrors mode = "Off" l'ha fatto per me
spankmaster79,

non è più necessario utilizzare customErrors(ad esempio IIS 7+, ASP.NET, AppPool classico ) tedgustaf.com/blog/2011/5/…
Kiquenet,

49

Fare doppio clic su "ASP" nella schermata principale del sito nell'amministratore IIS, espandere "Proprietà di debug", abilitare "Invia errori al browser" e fare clic su "Applica".

In "Pagine di errore" nella schermata principale selezionare "500", quindi "Modifica impostazioni funzionalità" e selezionare "Errori dettagliati".

Si noti che gli stessi passaggi si applicano a IIS 8.0 (Windows Server 2012).


Forse si applica a IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) con CLASSIC AppPool (NON integrato)
Kiquenet


20

In web.config sotto

<system.webServer>

sostituire (o aggiungere) la linea

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

con

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

Questo perché IIS7 di default intercetta i codici di stato HTTP come 4xx e 5xx generati dalle applicazioni più avanti nella pipeline.

Successivamente, abilita " Invia errori al browser " nella sezione "ASP" e, in " Pagine errori / Modifica impostazioni funzionalità ", seleziona "Errori dettagliati".

Inoltre, concedere le autorizzazioni di scrittura sulla cartella del sito Web al gruppo predefinito IIS_IUSRS .


1
Per l'equivalente dell'utente Power Shell, esegui:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz,

20

TLDR: per prima cosa determinare da dove nella pipeline stai ricevendo l'errore (scorrere cercando schermate di qualcosa che assomiglia al tuo errore), apportare modifiche per ottenere qualcosa di nuovo, ripetere.

Innanzitutto determinare quale messaggio di errore si sta effettivamente visualizzando.

Se vedi il file che si trova qui ...

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

... che generalmente si presenta così:

Errore 500 predefinito di IIS

... allora sai che stai vedendo la pagina di errore attualmente configurata in ** IIS ** e NON hai bisogno di cambiare le impostazioni di errore personalizzato ASP.net, l'impostazione di dettaglio dell'errore asp o l'impostazione del browser "mostra errori http amichevoli".

Potresti voler guardare il percorso sopra indicato invece di fidarti del mio screenshot nel caso in cui qualcuno lo abbia cambiato.

"Sì, vedo l'errore sopra descritto ..."

In questo caso, stai vedendo l'impostazione di < httpErrors > o in Gestione IIS è Pagine di errore -> Modifica impostazioni funzionalità. L'impostazione predefinita per questo è errorMode = DetailLocalOnly a livello di nodo del server (a differenza del livello del sito) che significa che mentre vedrai questa pagina di errore configurata mentre sei remoto, dovresti essere in grado di accedere localmente al server e vedere l'intero errore che dovrebbe assomigliare a questo:

Errore HTTP dettagliato

Dovresti avere tutto ciò di cui hai bisogno a quel punto per correggere l'errore corrente.

"Ma non vedo l'errore dettagliato nemmeno navigando sul server"

Questo lascia un paio di possibilità.

  1. Il browser che si sta utilizzando sul server è configurato per utilizzare un proxy nelle sue impostazioni di connessione, quindi non viene visto come "locale".
  2. In realtà non stai navigando verso il sito che ritieni stia visitando - questo accade di solito quando è coinvolto un bilanciamento del carico. Fai un controllo ping per vedere se DNS ti dà un IP sul server o da qualche altra parte.
  3. Sei httpErrors del sito impostazioni di sono impostate solo su "Personalizzato". Modificalo in "DettagliatoLocalOnly". Tuttavia, se si verifica un errore di configurazione, questo potrebbe non funzionare poiché anche httpErrors a livello di sito è un elemento di configurazione. In tal caso, procedere al n. 4
  4. L'impostazione predefinita per httpErrors per tutti i siti è "Personalizzata". In questo caso, è necessario fare clic sul nodo del server di livello superiore in Gestione IIS (e non su un sito specifico) e modificare le impostazioni di httpErrors in dettagliateLocalOnly. Se si tratta di un server interno e non sei preoccupato di divulgare informazioni sensibili, puoi anche impostarlo su "Dettagliato" che ti permetterà di vedere l'errore da client diversi dal server.
  5. Ti manca un modulo sul server come UrlRewrite (questo mi morde molto, e spesso dà il messaggio generico indipendentemente dalle impostazioni di httpErrors).

"Accedere al server non è un'opzione per me"

Cambia gli httpErrors del tuo sito in "Dettagliato" in modo da poterlo vedere da remoto. Ma se non funziona il tuo errore potrebbe essere già un errore di configurazione, vedi # 3 immediatamente sopra. Quindi potresti essere bloccato con # 4 o # 5 e avrai bisogno di qualcuno del tuo team di server.

"Non vedo la pagina di errore descritta sopra. Sto vedendo qualcosa di diverso"

Se vedi questo ...

inserisci qui la descrizione dell'immagine

... e ti aspetti di vedere qualcosa del genere ...

inserisci qui la descrizione dell'immagine

... quindi è necessario modificare "Invia errori al browser" su true in Gestione IIS, sotto Sito -> IIS -> ASP -> Proprietà di debug

Se vedi questo ...

cioè errori amichevoli 1

o questo...

cioè errori amichevoli 2

... devi disabilitare gli errori amichevoli nel tuo browser o utilizzare la webview di Fiddler per vedere la risposta effettiva rispetto a ciò che il tuo browser sceglie di mostrarti.

Se vedi questo ...

Errori personalizzati abilitati

... allora gli errori personalizzati stanno funzionando ma non hai una pagina di errore personalizzata (ovviamente a questo punto si parlava di .net e non di asp classico). È necessario modificare il tag CustomErrors nel proprio web.config in RemoteOnly per visualizzare sul server o su Off per visualizzare in remoto.

Se vedi qualcosa che ha lo stile del tuo sito, è probabile che gli errori personalizzati siano attivi o remoti e che visualizzi la pagina personalizzata (ad esempio Visualizzazioni-> Condiviso-> Errore.cshtml in MVC). Detto questo, è improbabile ma possibile che qualcuno abbia cambiato le pagine in IIS per httpErrors, quindi vedi la prima sezione su questo.


9

prova a impostare il valore dell'attributo httpErrors "istingResponse "su" PassThrough ". Il mio era impostato su "Sostituisci" che impediva la visualizzazione di YSOD.

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

2
customErrors è per asp.net. Gli httpError sono per IIS7 e quindi gestiscono i contenuti che non passano attraverso il gestore .net (ad es. .png, .js ecc.) Se si desidera pagine di errore per tipi di contenuto non.net, utilizzare le pagine di errore IIS (httpErrors per IIS7 , l'interfaccia utente per IIS6.) L'attributo customErrors viene utilizzato quando il codice .net genera un'eccezione (404, 403, 500 ecc.) e l'attributo httpErrors viene utilizzato quando IIS stesso genera un'eccezione. Questo perché IIS7 di default intercetta i codici di stato HTTP come 4xx e 5xx generati dalle applicazioni più avanti nella pipeline.
Kiquenet,

6

Una cosa che nessuno ha menzionato è una soluzione molto rapida e temporanea, è possibile visualizzare l'errore sul localhost di quel server web.


1
Questo se la terza opzione visibile nella risposta di Vaclav è selezionata.
ricksmt

3

È inoltre possibile verificare che se si è modificata la cartella del sito Web principale ( c:\inetpub\wwwroot) in un'altra cartella, è necessario concedere l'autorizzazione di lettura al gruppo IIS_IUSRS nella nuova cartella.


3

Per le persone che hanno provato TUTTO e NON POSSONO ottenere i dettagli dell'errore da mostrare, come me, è una buona idea controllare i diversi livelli di configurazione. Ho un file di configurazione a livello di sito Web e a livello di applicazione (all'interno del sito Web) controllare entrambi. Inoltre, come ho scoperto, avevo errori dettagliati disabilitati sul nodo più alto in IIS (appena sotto la pagina iniziale, ha il nome che è lo stesso del nomecomputer server web). Controlla le pagine di errore lì.



1

Se si esegue il browser nel server e si verifica l'URL del progetto con l'ip locale, tutti gli errori di quel progetto sono stati ricevuti senza una pagina di errore generale (ad esempio 500 pagina di errore).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.