ホームページ  >  記事  >  php教程  >  IIS7 によって報告される 500.23 エラーの原因の分析と解決策

IIS7 によって報告される 500.23 エラーの原因の分析と解決策

高洛峰
高洛峰オリジナル
2017-01-06 16:21:391739ブラウズ

背景: 今日、会社の端末で関数を開く際に例外が発生し、500 エラーが報告されました。Fiddler を使用してリンクを見つけ、IE で開いたところ、500.23 エラーが報告されました。ASP.NET 設定は、ASP.NET では適用されません。統合ホスティング パイプライン モードが検出されました。背景にはIIS7とtomcat7が統合された環境があり、これを記録します。

HTTP エラー 500.23 - 内部サーバー エラー

統合ホスティング パイプライン モードに適用されない ASP.NET 設定が検出されました。

IIS7 によって報告される 500.23 エラーの原因の分析と解決策

上記のエラーが発生するのはなぜですか?

IIS7 のアプリケーション プールには 2 つのモードがあり、1 つは「統合モード」、もう 1 つは「クラシック モード」です。

クラシック モードは、私たちが使い慣れている IIS 6 の方法です。

統合モードを使用する場合は、カスタム httpModules と httpHandlers の設定ファイルを変更し、それらを セクションと に転送する必要があります。

2 つの解決策:

最初の方法は、アプリケーション プールを構成することです。

IIS7 でアプリケーション プールを構成し、アプリケーション プールのモードを「クラシック」に変更します。その後はすべてが正常になります。図に示すように:

IIS7 によって報告される 500.23 エラーの原因の分析と解決策

IIS7。web.config 構成ファイルを変更する 2 つの方法:

注: web.config パスは C:inetpubwwwrootweb.config です

たとえば、元の設定 (環境に httpModules、httpHandlers ノードがない場合)

<system.web>
............
<httpModules>
<add name="MyModule"type="MyApp.MyModule" />
</httpModules>
<httpHandlers>
<add path="*.myh"verb="GET"type="MyApp.MyHandler" />
</httpHandlers>
</system.web>

IIS7 アプリケーション プールでは、「統合モード」になっているため、次のように変更します:

<system.web>
...........
</system.web>
<system.webServer>
<modules>
<add name="MyModule"type="MyApp.MyModule" /> 
</modules>
<handlers>
<add name="MyHandler"path="*.myh"verb="GET"type="MyApp.MyHandler"preCondition="integratedMode" />
</handlers>
</system.webServer>

(web.config に httpModules、httpHandlers ノードがない場合は、ノード system.webServer:

<validation validateIntegratedModeConfiguration="false" />

エラーを回避するために統合モードの検証を無効にします

IIS ログの場所

IIS 6.0 ログは次の場所に保存されます:

c:windowssystem32logfiles


IIS 7 ログは次の場所に保存されます:

%SystemDrive%inetpublogsLogFiles



テスト後、IIS ログは即座に書き込まれ、IIS のリセットは必要ありません。


IIS 6 と 7 のログは、サイトごとに異なるフォルダーに書き込まれます。場所フォルダーの形式は「w3svc{siteId}」です。


IIS6 では、サイト ID を表示する方法は IIS を介して行われます。


IIS7 では、IIS マネージャーの詳細設定で、ログ フォルダーの名前が使用されます。はサイト ID であり、この ID を使用して LogFiles フォルダー内のどのファイルが表示するサイトに属しているかを見つける必要があります

統合とクラシックの違い


IIS7 アプリケーション プールには 2 つのモードがあります。 1 つは統合モードで、もう 1 つはクラシック モードです。次に、カスタム httpModules と httpHandlers を変更し、それらを セクションと に移動します。 IIS7 と IIS6 の 2 つのモードの違いは? の httpModules> および 設定セクションは無視され、disabledvalidation が設定されている場合、エラーは生成されません。


IIS7.0 クラシック モード: 上記の状況とは異なり、 は無視されます。


クラシック vs 統合

クラシック モード (IIS6 以下の唯一のモード) は、IIS が ISAPI 拡張機能と ISAPI フィルターのみを直接操作するモードです。実際、このモードでは、Asp.net は単なる ISAPI 拡張機能 (aspnet_isapi.dll) です。 IIS は、Asp.net を ISAPI に実装された外部プラグインとして扱い、ブラック ボックスのように動作します (このモードでは、ASP.NET に要求を送信する必要がある場合のみ)。 , Asp.net は、IIS 用の PHP やその他のテクノロジと大きな違いはありません


IIS6.0 以下で動作する唯一のモードはクラシック モードです (ISAPI EXTENSION、ISAPI FILTERS でのみ動作します)。このモードでは、asp.net は、それぞれ ISAPI EXTENSION と ISAPI FILTER を実装する単なるプラグイン (aspnet_isapi.dll、aspnet_filter.dll) です。II の仕事は、特定の要求を Asp.net に転送し、PHP でホストすることだけです。 IIS のプラグインなど。


一方、統合モードは、IIS パイプラインが Asp.net 要求パイプラインと緊密に統合されている (つまり、まったく同じです)、ASP.NET が必要とするすべての要求を認識し、途中で処理することができる IIS7 の新しいモードです。このモードでは、ASP.NET は外部プラグインとして扱われなくなり、IIS に完全に統合され、Asp.net HttpModules は基本的に ISAPI フィルターとほぼ同じ能力を持ちます。このモードでは、Asp.net は基本的に IIS の一部です


ただし、統合モードでは、IIS パイプラインは Asp.net 要求パイプラインと緊密に統合されます。 net はリクエスト パイプライン全体を完全に制御し、アクセスできます。 Asp.net は外部プラグインではなくなり、IIS に完全に統合されました。このモードでは、Asp.net HttpModules と ISAPI Filter は同等の制御権限を持ち、Asp.net HttpHandlers と ISAPI Extension も同等の制御権限を持ちます。つまり、Asp.net はすでに IIS の一部です。


IIS6 と IIS7 の両方を考慮する場合は、web.config の httpHandlers (IIS6 の場合) とハンドラー (IIS7 の場合) で同じ定義を維持できますが、 しないと、IIS7 では定義が繰り返されるためエラーが発生します。

IIS7 が 500.23 エラーを報告する原因分析と解決策に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。