ApplicationHost.config 소개

작성자 : Tobin Titus

소개

ApplicationHost.config IIS 7 이상을 사용하는 경우 구성 시스템의 루트 파일입니다. 여기에는 모든 사이트, 애플리케이션, 가상 디렉터리 및 애플리케이션 풀의 정의와 웹 서버 설정에 대한 전역 기본값(machine.config 및 .NET Framework 설정의 루트 web.config 유사)이 포함됩니다.

또한 웹 서버가 설치될 때 사용할 수 있는 유일한 IIS 구성 파일이라는 사실도 특별합니다(그러나 사용자가 원하는 경우 web.config 파일을 추가할 수 있음). 여기에는 모든 IIS 및 WAS(Windows 정품 인증 시스템) 섹션을 등록하기 위한 특수 섹션(configSections라고 함)이 포함되어 있습니다(machine.config .NET Framework 섹션에 대해 동일한 개념이 있습니다). 대부분의 IIS 섹션을 전역 수준으로 잠그는 정의가 있으므로 기본적으로 계층 구조의 하위 수준 web.config 파일로 재정의할 수 없습니다.

파일의 위치는 현재 %windir%\system32\inetsrv\config 디렉터리에 있습니다. 이 문서에서는 파일에 나타나는 순서대로 모든 섹션을 안내하고 하나씩 설명합니다. 가장 복잡한 섹션은 system.webServer이므로 특히 해당 섹션에 대한 설명 읽기를 건너뛰지 않는 것이 좋습니다.

다음 사항에 유의하세요.

  1. 이 문서에서는 applicationHost.config 표시된 대로 각 구성 섹션의 내용을 지정합니다. 의도적으로 많은 섹션이 비어 있거나 완료되지 않았습니다(일부 콘텐츠만 XML에 표시됨). 나머지 값은 스키마 기본값에서 가져옵니다. 이렇게 하면 너무 많은 정보와 파일이 복잡해지는 것을 방지하고 합리적으로 읽을 수 있도록 합니다.

    • 모든 섹션의 모든 속성에 대한 기본값, 유효한 범위 등을 포함한 전체 스키마 참조는 (IIS 설정의 경우) 또는 ASPNET\_Schema.xml (ASP.NET 설정의 경우) 또는 FX_Schema.xml(다른 .NET Framework 설정의 경우)를 참조 %windir%\system32\inetsrv\config\schema\IIS\_Schema.xml 하세요.
    • 편의를 위해 이러한 파일의 청크가 적절한 섹션에 이 문서에 포함되므로 판독기는 각 섹션에 사용할 수 있는 속성, 기본값 등을 이해할 수 있습니다. 스키마 정보를 읽는 방법에 대한 아래 추가 참고 사항을 참조하세요.
  2. 파일을 변경하기 전에 백업합니다.

구성 스키마를 읽는 방법

위에서 설명한 것처럼 이 문서에는 각 섹션에 대한 스키마 정보 조각이 포함되어 있으므로 판독기는 사용할 수 있는 속성과 기본값 및 유효한 범위를 검색할 수 있습니다. 코드 조각은 IIS 설정 %windir%\system32\inetsrv\config\schema\IIS\_Schema.xml에 대한 구성 스키마 파일에서 직접 가져옵니다. 이 섹션에서는 스키마 정보를 읽는 방법을 설명합니다.

각 구성 섹션에 대한 스키마는 XML 요소에 정의되어 있습니다. 섹션 그룹에 대한 스키마 정의가 없습니다. 스키마를 읽는 방법을 설명하는 데 사용되는 형식은 다음과 같습니다.

<attribute-name>="<default-value>"  [<metadata>] [<description>]

<attribute-name> 는 XML에 표시된 대로 구성 특성의 이름입니다. 모든 특성에는 이름이 있어야 합니다.

<default-value> 는 특성에 대한 XML에 다른 값이 지정되지 않은 경우 기본적으로 사용되는 값입니다. 모든 특성에 기본값(예: 사이트 이름)이 있는 것은 아닙니다. 이 경우 구문은 ""입니다.

<metadata> 에는 다음과 같은 여러 항목이 포함되어 있습니다.

  • 특성의 런타임 형식입니다. "bool", "enum", "flags", "int", "int64", "String", "timeSpan" 중 하나입니다. 모든 특성에는 형식이 있어야 합니다.
  • "bool"은 "true" 또는 "false"입니다.
  • "enum"은 특성에 대해 하나만 설정할 수 있는 가능한 값 집합입니다. 이러한 모든 값에는 숫자 값과 친숙한 이름이 있습니다. 구문은 문자 "|"를 친숙한 이름 사이의 구분 기호로 사용합니다. value1|value2|...|valueN.
  • 값 조합이 허용된다는 점을 제외하고 "flags"는 "열거형"과 비슷합니다. 따라서 숫자 값은 2의 배수여야 하므로 조합형으로 함께 ORed할 수 있습니다. 구문은 "enum": value1|value2|...|valueN.
  • "int"는 32비트 정수입니다.
  • "int64"는 64비트 정수입니다.
  • "String"은 문자열입니다.
  • "timeSpan"은 관리 코드 형식 TimeSpan과 유사한 시간 단위의 표현입니다. 숫자로 유지할 수 있습니다(초 또는 분을 나타낸다). 또는 "[dd:]hh:mm:ss" 형식의 형식이 지정된 문자열입니다. "[dd:]" 요소는 선택적 일 수를 나타냅니다. 다른 요소는 각각 시간, 분 및 초 수를 나타냅니다. "timeSpanFormat" 특성은 사용해야 하는 형식(초 수, 분 수 또는 서식이 지정된 문자열)을 지정합니다.
  • 필수 특성은 "필수"로 표시됩니다. 즉, XML에서 해당 값이 설정되어야 합니다. 예를 들어 사이트 이름은 필수 특성입니다(모든 사이트에는 IIS 7.0 이상의 이름이 있어야 합니다).

<description> 는 특성에 대한 간단한 설명입니다.

섹션 스키마

<sectionSchema XML 요소는 스키마> 정보의 기본 단위입니다. 다른 모든 스키마 정보는 그 안에 지정됩니다. 여기에는 하나의 특성("이름")이 직접 있고 나머지 스키마는 해당 내의 하위 요소에 있습니다.

<sectionSchema name=""  <!-- [String, Required] [XML full path of the section] --> >
    <!-- sub-elements here describing rest of schema; -->
    <!-- their description is right below in the doc. --> 
</sectionSchema>

특성 스키마

모든 특성은 스키마의 해당 <attribute> XML 요소에 정의됩니다. <attribute> 요소는 sectionSchema> 요소에 직접 있거나(특성이 scope 섹션에 있는 경우) 요소(특성이 섹션 내의 하위 요소에 있는 경우) 또는 <컬렉션> 요소(특성이 섹션 내의 컬렉션에 있는 경우)에 있을 <수 있습니다.

특성 스키마는 특성의 이름과 런타임 형식을 지정해야 합니다. 특성을 필요에 따라 표시할 수 있습니다. 특성을 고유 키(컬렉션 내에 있는 경우)로 표시하거나 컬렉션 키의 일부로 표시할 수 있습니다(다른 특성과 함께). 특성의 기본값을 지정할 수 있습니다. 디스크에서 자동 암호화에 대한 특성을 표시할 수 있습니다. "Infinite"라는 단어가 특성의 값으로 허용되는지(int 및 in64와 같은 숫자 형식 및 timeSpan에 대해서만) 지정할 수 있습니다. 시간 범위 특성에 대한 시간 범위 형식(초, 분 또는 형식이 지정된 문자열)을 지정할 수 있습니다. 특성에 대한 유효성 검사 규칙을 지정할 수 있습니다(이 문서의 아래 특성 유효성 검사 섹션 참조).

<attribute
    name=""  [String, Required] [XML name of the attribute]
    type=""  [bool|enum|flags|int|int64|string|timeSpan, Required][Runtime type]
    required="false"  [bool] [Indicates if must be set]
    isUniqueKey="false"    [bool] [Serves as the collection key]
    isCombinedKey="false"  [bool] [Part of a multi-attribute key]
    defaultValue=""  [String] [Default value or comma-delimited flags]
    encrypted="false"  [bool] [Indicates if value persisted encrypted]
    allowInfinite="false"  [bool] [Indicates if "Infinite" can be set]
    timeSpanFormat="string" [string|seconds|minutes] [hh:mm:ss or number]
    validationType=""       [See validation below]
    validationParameter=""  [See validation below]
/>

요소 스키마

모든 요소는 스키마의 해당 <element> XML 요소에 정의됩니다. 요소를 중첩할 수 있습니다. 요소는 단순히 다른 특성 또는 하위 요소에 대한 컨테이너입니다. 이름이 있어야 하며 컬렉션 요소의 기본값 컨테이너로 사용될 수 있습니다(예: siteDefaults는 컬렉션의 <sites> 사이트에 대한 기본값을 보유).

컬렉션 스키마

모든 컬렉션은 스키마의 해당 <컬렉션> XML 요소에 정의됩니다. 컬렉션에는 개별적으로 추가 및 제거할 수 있는 여러 요소가 포함되어 있습니다. 일반적으로 컬렉션 지시문 이름은 "add", "remove" 및 "clear"이지만 일부 컬렉션은 명확성을 위해 다른 이름을 사용합니다(예: 컬렉션은 "add" 대신 "site"를 사용함).

이 작업은 컬렉션 스키마에서 addElement, removeElement 및 clearElement에 대한 값을 지정하여 수행됩니다. 스키마에서 컬렉션 지시문이 누락된 경우 컬렉션은 이를 지원하지 않습니다. 컬렉션 스키마는 컬렉션 요소의 기본값 컨테이너로 사용할 기본 요소의 이름을 지정할 수 있습니다(요소 스키마의 isCollectionDefault를 보완).

예를 들어 컬렉션은 siteDefaults를 기본 요소로 사용합니다. 대부분의 컬렉션은 구성 파일을 네임스페이스 아래로 병합할 때 요소를 추가하지만, 일부는 스키마에서 mergeAppend="false"를 지정하여 앞에 추가 동작을 지정할 수 있습니다. 예를 들어 사이트의 applicationHost.config 및 web.config 두 가지 구성 수준을 고려합니다. applicationHost.config:

<myCollection>
    <add value="1"/> 
</myCollection>

web.config:

<myCollection>

    <add value="2" />        
</myCollection>

컬렉션이 추가되면 사이트 수준에서 병합된(유효) 구성은 다음과 같습니다.

<myCollection>

    <add value="1"/>

    <add value="2"/>    
</myCollection>

그러나 앞에 추가되는 경우 다음과 같습니다.

<myCollection>

    <add value="2"/>

    <add value="1"/>    
</myCollection>

일부 컬렉션은 해당 스키마에 allowDuplicates="true"를 지정하여 중복 항목을 허용할 수 있습니다. 이 작업은 주로 .NET 프레임워크(machine.config)에서 레거시 컬렉션을 지원하기 위해 수행됩니다.

일부 컬렉션은 스키마에 지정된 특성 외에 추가 특성을 허용할 수 있습니다. 이 작업은 해당 스키마에 allowUnrecognizedAttributes="true"를 지정하여 수행됩니다. 주로 .NET Framework에서 공급자 기반 컬렉션을 지원하기 위해 수행됩니다.

<collection            
    addElement=""     [String] [Name of Add directive, if supported]
    removeElement=""  [String] [Name of Remove directive, if supported]
    clearElement=""   [String] [Name of Clear directive, if supported]
    defaultElement="" [applicationDefaults|applicationPoolDefaults|siteDefaults|virtualDirectoryDefaults] [See isCollectionDefault]
    mergeAppend="true"  [bool] [Indicates whether or not deepest set values are appended]  
    allowDuplicates="false"  [bool] [Indicates if multiple elements may have the same keys]
    allowUnrecognizedAttributes="false"  [bool] [Indicates if non-schema attributes ok]
/>

열거형 스키마

"enum" 형식의 모든 특성은 스키마의 해당 <열거형 XML 요소에서 해당 열거형> 값을 정의해야 합니다. 모든 값에는 이름 및 숫자 값이 있어야 합니다.

<enum name=""  [String, Required] [Friendly name of the enum]
    value="" [int, Required] [Numeric value]
/>

플래그 스키마

"flags" 형식의 모든 특성은 스키마의 해당 XML 요소에서 플래그 값을 정의해야 합니다. 모든 플래그에는 식별 이름 및 다른 값과 함께 ORed를 사용하여 조합을 구성할 수 있는 숫자 값이 있어야 합니다. 따라서 값은 2의 배수여야 합니다.

<flags            
    name=""  [String, Required] [Friendly name of the flag]
    value="" [int in power of 2, Required] [Numeric value]
/>

특성 유효성 검사

특성 유효성 검사는 XML을 구문 분석하여 파일에서 섹션을 가져올 때와 구성 API를 호출하여 값을 설정할 때 수행됩니다. 유효성 검사에 실패하면 원하는 작업(섹션 가져오기 또는 잘못된 값 설정)이 실패합니다.

각 특성은 해당 값에 대해 하나의 유효성 검사기를 연결할 수 있습니다. 이 작업은 validationType에서 적절한 유효성 검사기 이름과 특성 스키마의 validationParameter에 추가 매개 변수를 지정하여 수행됩니다.

시스템은 다음 유효성 검사기를 지원합니다.

ApplicationPoolName 유효성 검사기

다음 문자에서 이 유효성 검사기가 실패합니다. |<>&"

validationType="applicationPoolName" validationParameter=""

IntegerRange 유효성 검사기

값이 정수의 [내부] 범위를 벗어나면 이 유효성 검사기가 실패합니다.

validationType="integerRange"
validationParameter="<minimum>,<maximum>[,exclude]"

NonEmptyString 유효성 검사기

문자열 값이 설정된 경우 이 유효성 검사기가 실패합니다.

validationType="nonEmptyString"
validationParameter=""

SiteName 유효성 검사기

이 유효성 검사기는 다음 문자에서 실패합니다. /.?

validationType="siteName"
validationParameter=""

TimeSpanRange 유효성 검사기

값이 [내부] 범위를 벗어나면 이 유효성 검사기가 실패합니다(초).

validationType="timeSpanRange"
validationParameter="<minimum>,<maximum>,<granularity>[,exclude]"

TrimWhiteSpace 유효성 검사기

공백이 값의 시작 또는 끝에 설정된 경우 이 유효성 검사기가 실패합니다.

validationType="trimWhiteSpaceString"
validationParameter=""

XML 헤더

모든 구성 파일은 XML 파일이며 필요에 따라 다음 줄을 첫 번째 줄로 포함할 수 있습니다.

<?xml version="1.0" encoding="UTF-8" ?>

또한 XML <구성> 태그 내에 모든 콘텐츠를 포함해야 합니다.

<configuration>

   <!-- [All of the context goes here] -->

</configuration>

ApplicationHost.config 위에 있는 줄이 포함되어 있습니다. 이 문서의 나머지 부분에서는 파일의 나머지 섹션을 안내합니다.

<configSections> 섹션

파일의 첫 번째 섹션입니다. 파일의 다른 모든 섹션 목록이 포함되어 있습니다. 섹션 등록 지점입니다(예: 시스템에서 섹션 등록을 취소하려면 이 섹션에서 해당 줄을 제거합니다. config\schema 디렉터리에서 해당 스키마 파일을 제거할 필요가 없음).

다른 구성 파일에는 파일 맨 위에 섹션도 있을 수 있습니다. 전역 수준보다 낮은 수준에서 섹션을 등록하는 데 유용할 수 있습니다. 이러한 섹션은 네임스페이스의 해당 scope 대해서만 등록됩니다. Web.config 파일은 시스템에 섹션만 추가할 수 있습니다. 부모 수준에서 등록된 섹션을 다시 정의할 수 없으며 섹션을 제거(등록 취소)할 수 없습니다.

섹션은 섹션 그룹을 포함하는 계층 구조로 구성됩니다. 각 섹션 등록은 섹션 이름을 지정합니다. 섹션 처리기의 관리 코드 형식(이 파일에는 의미가 없으며 beta2 이후에 제거됩니다. System.Configuration에서만 사용되므로 machine.config 및 web.config 파일에 계속 존재함) allowDefinition 수준이 기본값과 다른 경우 및 overrideModeDefault(이 특성은 이 파일의 대부분의 IIS 섹션을 잠그는 데 사용됨).

참고

섹션은 구성 설정의 배포, 등록, 잠금, 검색 및 포함의 기본 단위입니다. 모든 섹션은 하나의 섹션 그룹("직접 부모")에 속합니다. 섹션 그룹은 논리적으로 관련된 섹션의 컨테이너이며 구조화된 계층 구조의 용도로만 사용됩니다. 섹션 그룹에서는 작업을 수행할 수 없습니다. 섹션 그룹에는 구성 설정이 직접 있을 수 없습니다(설정은 섹션에 속). 섹션 그룹은 중첩될 수 있습니다. 섹션을 사용할 수 없습니다.

스키마

<section
    name=""  [Required, Collection Key] [XML name of the section]
    allowDefinition="Everywhere" [MachineOnly|MachineToApplication|Everywhere] [Level where it can be set]
    overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
/>

잠금

대부분의 IIS 섹션은 기본적으로 잠겨 있으며, 섹션에서 overrideModeDefault="Deny"를 사용합니다. 섹션의 잠금을 해제하는 권장 방법은 다음과 같이 태그를 사용하는 것입니다.

<location path="Default Web Site" overrideMode="Allow" >
  <system.webServer>
    <asp/>
  </system.webServer>            
</location>

위의 위치 태그는 기본 웹 사이트에 대해서만 섹션의 잠금을 해제합니다. 모든 사이트에 대해 잠금을 해제하려면 applicationHost.config 다음을 지정합니다.

<location path="." overrideMode="Allow">
    <system.webServer>
         <asp/>
    </system.webServer>
</location>

참고

path="." 및 path=""는 동일한 효과를 갖습니다. 계층의 현재 수준을 참조합니다.