詳細な500エラーメッセージ、ASP + IIS 7.5


192

IIS 7.5、2008rc2、クラシックASP、500エラーメッセージ:

内部サーバーエラーが発生したため、ページを表示できません。

IISを構成してより詳細なエラーを取得する方法を知る必要があります。
ASP構成のすべてのデバッグオプションをtrueに設定してみました。
しかし、それはうまくいきませんでした。誰か助けてもらえますか?


テキストファイルにエラーを記録する別の方法を使用しています: stackoverflow.com/questions/20475502/… 主な違い-エラー情報はテキストファイルに保存されます
Zam

回答:


231

Alex Kと同じ問題が発生し、同じ方法で修正しました。

「Send Errors To Browser」が機能しない場合は、次のように設定します。

エラーページ-> 500->機能設定の編集->「詳細なエラー」

ここに画像の説明を入力してください

また、返されるエラーページのコンテンツが非常に短く、IEを使用している場合、IEはサーバーから返される有用なコンテンツを無視して、代わりに独自の一般的なエラーページを表示します。IEのオプションでこれをオフにするか、別のブラウザを使用できます。



3
パネルに「エラーページ」がない場合は、機能が有効になっていることを確認します。Windowsの機能をオンまたはオフにします=> WWWサービス、一般的なHTTP機能、[x] HTTPエラー
fiat

1
@fiat「エラーページ」を有効にするために、私は行かなければなりませんでした:Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors
Jess Telford、2015年

注:「エラーページ」「.NETエラーページ」は異なります。特に「エラーページ」が必要です。
Jess Telford、2015年

@JessTelford HOW-TOfor NETエラーページ
Kiquenet 2015年

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>私の場合は設定で十分です。
marapet

4
system.webServerセクションは、従来のASP実行している場合でも、IIS 7+によって読み取られる
ティム・ルイス

2
customErrors mode = "Off"は私のためにそれをしました
spankmaster79

それを使用する必要がなくなりましたcustomErrors(例えばためにIIS 7+、ASP.NET、クラシックアプリケーションプールtedgustaf.com/blog/2011/5/...
Kiquenet

49

IIS管理のサイトのホーム画面で「ASP」をダブルクリックし、「デバッグのプロパティ」を展開して、「ブラウザにエラーを送信する」を有効にして、「適用」をクリックします。

ホーム画面の「エラーページ」で「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が、アプリケーションによって生成された4xxや5xxなどのHTTPステータスコードをパイプラインの上位でインターセプトするためです。

次に、「ASP」セクションで「ブラウザにエラーを送信有効にし、「エラーページ/機能設定の編集」で「詳細なエラー」を選択します。

また、IIS_IUSRSビルトイングループにWebサイトフォルダーの書き込み権限を付与します。


1
:パワーシェルユーザーと同等、実行のためにSet-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz

20

TLDR:まず、パイプラインのどこからエラーが発生しているのかを特定し(スクロールしてエラーに似たもののスクリーンショットを探します)、変更を加えて新しいものを取得し、繰り返します。

最初に、実際に表示されているエラーメッセージを確認します。

ここにあるファイルが表示されている場合...

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

...通常は次のようになります。

IISデフォルト500エラー

...次に、現在設定されているエラーページが** IIS **に表示されていることを確認し、ASP.netのcustomErrors設定、aspエラーの詳細設定、または「友好的なhttpエラーを表示する」ブラウザ設定を変更する必要はありません。

誰かが変更した場合に備えて、スクリーンショットを信頼するのではなく、上記のパスを確認することをお勧めします。

「はい、上記のエラーが表示されます...」

この場合、< httpErrors >の設定が表示されるか、IISマネージャーでエラーページ -> [機能設定の編集]が表示されます。これのデフォルトは、(サイトレベルではなく)サーバーノードレベルでerrorMode = DetailedLocalOnlyです。これは、リモートでこの構成済みエラーページが表示されている間、サーバーにローカルでログオンして完全な状態で表示できることを意味します。エラーは次のようになります。

詳細なHTTPエラー

現在のエラーを修正するために、その時点で必要なものがすべて揃っているはずです。

「しかし、サーバーを参照しても詳細なエラーは表示されません。」

それはいくつかの可能性を残します。

  1. サーバーで使用しているブラウザは、接続設定でプロキシを使用するように構成されているため、「ローカル」として表示されません。
  2. 実際に、自分が閲覧していると思われるサイトを閲覧しているわけではありません。これは、一般にロードバランサーが関与している場合に発生します。pingチェックを実行して、dnsがサーバーまたは他のどこかのIPを提供しているかどうかを確認します。
  3. あなたはサイトのhttpErrors設定が「カスタム」のみに設定されています。「DetailedLocalOnly」に変更します。ただし、構成エラーがある場合は、サイトレベルのhttpErrorsも構成アイテムであるため、機能しない可能性があります。その場合は#4に進みます
  4. すべてのサイトのhttpErrorsのデフォルトは「カスタム」に設定されています。この場合、IISマネージャー(特定のサイトではない)の最上位のサーバーノードをクリックして、httpErrors設定をDetailedLocalOnlyに変更する必要があります。これが内部サーバーであり、機密情報を漏らす心配がない場合は、「詳細」に設定して、サーバー以外のクライアントからのエラーを表示することもできます。
  5. UrlRewriteのようなサーバー上のモジュールがありません(これは私によく噛み付き、httpErrors設定に関係なく一般的なメッセージを表示することがよくあります)。

「サーバーへのログオンはオプションではありません」

リモートで確認できるように、サイトのhttpErrorsを「詳細」に変更します。しかし、それが機能しない場合、エラーはすでに構成エラーである可能性があります。上記の3を参照してください。そのため、#4または#5でスタックしている可能性があり、サーバーチームの誰かが必要になります。

「上記のエラーページが表示されません。別のエラーが表示されます」

これを見たら...

ここに画像の説明を入力してください

...そしてあなたはこのようなものを見ることを期待しています...

ここに画像の説明を入力してください

...次に、IISマネージャの[サイト]-> [IIS]-> [ASP]-> [デバッグプロパティ]で、[ブラウザにエラーを送信]をtrueに変更する必要があります。

これを見たら...

すなわちフレンドリーなエラー1

またはこれ...

つまり、フレンドリーなエラー2

...ブラウザのフレンドリーエラーを無効にするか、fiddlerのWebビューを使用して、実際の応答とブラウザが表示するように選択した内容を確認する必要があります。

これを見たら...

カスタムエラーを有効にしました

...カスタムエラーは機能していますが、カスタムエラーページはありません(もちろん、現時点では.netについて話していて、クラシックASPではありません)。サーバーで表示するには、web.configのcustomErrorsタグをRemoteOnlyに変更するか、リモートで表示するにはOffに変更する必要があります。

サイトのようなスタイルの何かが表示される場合、カスタムエラーはおそらくOnまたはRemoteOnlyであり、カスタムページを表示しています(たとえば、MVCのViews-> Shared-> Error.cshtml)。そうは言っても、誰かがIISのページをhttpErrorsに変更した可能性は低いですが、その最初のセクションを参照してください。


9

「existingResponse」httpErrors属性の値を「PassThrough」に設定してみてください。地雷が「交換」に設定されていたため、YSODが表示されませんでした。

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

2
customErrorsはasp.net用です。httpErrorsはIIS7用であり、.netハンドラーを通過しないコンテンツ(.png、.jsなど)を処理します。.net以外のコンテンツタイプのエラーページが必要な場合は、IISエラーページ(IIS7のhttpErrors)を使用します。 、IIS6のUI。)customErrors属性は、.netコードが例外(404、403、500など)をスローしているときに使用され、httpErrors属性はIIS自体が例外をスローしているときに使用されます。これは、デフォルトでIIS7が、アプリケーションによって生成された4xxや5xxなどのHTTPステータスコードをパイプラインの上位でインターセプトするためです。
Kiquenet

6

誰も言及していないことの1つは、非常に迅速で一時的な修正です。そのWebサーバーのローカルホストでエラーを表示できます。


1
これは、Vaclavの回答に表示されている3番目のオプションが選択されている場合です。
ricksmt 14

3

また、メインのWebサイトフォルダー(c:\inetpub\wwwroot)を別のフォルダーに変更した場合、新しいフォルダーのIIS_IUSRSグループに読み取り権限を与える必要があることを確認することもできます。


3

すべてを試してみて、エラーの詳細を表示できない人は、私のように、構成のさまざまなレベルを確認することをお勧めします。Webサイトレベルとアプリケーションレベル(Webサイト内)に構成ファイルがあるので、両方を確認します。また、結局のところ、IISの最上位のノード(スタートページのすぐ下に、Webサーバーのコンピューター名と同じ名前が付いています)で詳細エラーを無効にしています。そこでエラーページを確認してください。



1

サーバーでブラウザーを実行し、ローカルIPを使用してプロジェクトのURLをテストすると、そのプロジェクトのすべてのエラーを受け取り、一般にエラーページ(たとえば、500エラーページ)は表示されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.