私のweb.configにこのセクションがあります:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<security>
<authentication>
<anonymousAuthentication enabled="true" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
IIS7がクラッシュし、認証セクションについて文句を言う:
モジュールAnonymousAuthenticationModule
通知AuthenticateRequest
ハンドラStaticFile
エラーコード0x80070021
構成エラーこの構成セクションは、このパスでは使用できません。これは、セクションが親レベルでロックされている場合に発生します。ロックは、デフォルト(overrideModeDefault = "Deny")か、overrideMode = "Deny"または従来のallowOverride = "false"が指定された場所タグによって明示的に設定されます。
Config Source
69: <authentication>
70: <anonymousAuthentication enabled="true" />
したがって、これを解決する通常の方法は、%windir%\system32\inetsrv\config\applicationHost.config
とセクションのロックを解除します。
<sectionGroup name="system.webServer">
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Allow" />
<section name="basicAuthentication" overrideModeDefault="Allow" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Allow" />
<section name="digestAuthentication" overrideModeDefault="Allow" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Allow" />
<section name="windowsAuthentication" overrideModeDefault="Allow" />
</sectionGroup>
(または、appcmd unlock config
)。
奇妙なこと:私はそれをやったが、それでもまだ不満がある.
私は場所を探しました(MVCは使用しているすべてのサイトのルートである私のWebサイトの名前です):
<location path="MVC" overrideMode="Allow">
<system.webServer overrideMode="Allow">
<security overrideMode="Allow">
<authentication overrideMode="Allow">
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</location>
それでも爆破します。なぜこれが起こるのか私は困惑しています。 web.configから削除できません。根本的な問題を見つけたいのですが。
IISから最終的に特定の情報を取得する方法はありますか?
編集: IIS7管理コンソールを使用して、ルート(マイマシン)に移動し、[構成の編集]をクリックしてセクションをロック解除することで、これを修正できました。それでも、実際に変更するファイルが見つからないため、もっと良い方法があるかどうか知りたいのですが。
私のために問題を修正するこれらの手順を実行しました:
system.webServer/security/authentication/anonymousAuthentication
system.webServer/security/authentication/windowsAuthentication
これにより、Windows Server 2012でのエラーが解決されましたIIS 8.5。他のバージョンでも動作するはずです。
.NET Extensibility 4.5
_と_ASP>NET 4.5
_を選択しますNET 3.5
_、_.NET 4.5
_、_ASP.NET 4.5
_Web Server (all)
、Management Tools (IIS Management Console and Management Service)
、Windows
を選択します構成のロックは次の場所で発生する可能性があります。
Applicationhost.config(構成文字列:MACHINE/WEBROOT/APPHOST)
サイトのWeb.configファイル(MACHINE/WEBROOT/APPHOST/Webサイト名)
アプリのweb.configファイル(MACHINE/WEBROOT/APPHOST /サイト名/アプリ名)
セクションをロックすると(セクション:IIS構成セクション、たとえば<asp>
)、階層の下位レベルにいる誰に対しても、これらの設定を構成する機能を拒否できます。
GUIの機能の委任を使用することは間違いなく、AppCMDが行うことと非常によく似ていますが、対象となる構成のレベルで<location>
タグの特定のセクションのOverrideModeを設定します。 。
APPCMDはファイルのロックを解除するために使用できますが、ファイルのロックを解除する場所に注意を払います。これはGUIほどスマートではありません。
-commit:apphost
をAPPCMD UNLOCK
コマンドの最後に追加すると、Applicationhost.configがターゲットになります。これは、IIS操作のキーファイルです(置換以前のバージョンのメタベース。一元化されたすべての設定を保存しますが、(行う場合は)オーバーライドを許可します(web.configファイル)。
-commit:apphostを指定しない場合、APPCMDはweb.configファイルの最も近い論理的な場所をターゲットにします-サイトレベルでもアプリレベルでも、上記のセットのような構成文字列を使用して設定が変更されたことを示します。 (余談ですが、サブWebサイトの設定のみを対象とすることはできますが、apphostにコミットします-それは場所タグを使用して実現します)
つまり、(メモリの言い換え)「MACHINE/WEBROOT/APPHOSTにコミットされた変更」と表示されている場合、これはIIS階層の最上位を意味します。
「MACHINE/WEBROOT/APPHOST/Dodgy Webサイトへのコミット」と表示されている場合、それはDodgy Webサイトの背後にある物理パスを検索し、その場所にweb.configファイルを書き込んだ(または更新した)ことを意味します。
IISExpressおよびVisual Studio 2015を使用している場合、_applicationHost.config
_は$(solutionDir).vs\config\applicationhost.config
に格納されます(Nime Cloudの answer に感謝)。
必要に応じて_overrideModeDefault="Allow"
_を変更してください。
_<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...
_
アプリケーションプールを試して、32ビットアプリケーションのサポートを無効にするIIS Manager-> Application Pools-> select [Your AppPool]-> Enable Settings-> Enable 32-Bit Applications-it to '誤り」