애플리케이션 풀 <추가 추가>
개요
<add>
요소의 <applicationPools>
요소는 IIS 7 이상 애플리케이션 풀에 대한 구성 설정을 제어합니다. IIS 서버에서 실행하려는 각 애플리케이션 풀에 대한 ApplicationHost.config 파일에 요소를 만듭니 <add>
다.
요소에는 <add>
파이프라인 처리 모드를 구성하는 특성 및 자식 요소와 들어오는 요청에 대해 애플리케이션 풀에서 작업자가 처리하는 .NET Framework 버전이 포함될 수 있습니다. 이 요소에는 애플리케이션 풀 ID, 성능 및 상태 및 재활용 애플리케이션 풀 설정을 구성하는 자식 요소도 포함되어 있습니다.
IIS 7 이상에서 새 애플리케이션 풀을 만들 때 최소한 애플리케이션 풀에 고유한 이름을 할당해야 합니다. 애플리케이션 풀을 사용하는 애플리케이션에 필요한 다른 모든 속성을 구성합니다.
IIS 7.5 이상의 새로운 기능
IIS 7.5부터 요소의 managedRuntimeLoader, CLRConfigFile 및 startMode 특성을 사용하여 자동으로 시작되도록 애플리케이션을 <add>
구성할 수 있습니다. 이러한 특성은 각각 애플리케이션에 런타임 로드를 제공하는 관리되는 DLL의 이름, 애플리케이션에 대한 공용 언어 런타임 구성 파일 및 애플리케이션의 시작 유형을 구성합니다.
또한 IIS 7.5 이상의 새로운 기능은 요소의 <processModel>
identityType 특성에 대한 새 ApplicationPoolIdentity
형식입니다. 이 새 ID 형식은 이제 애플리케이션의 기본 프로세스 ID이며 특정 애플리케이션 풀에 대한 액세스를 허용하도록 콘텐츠 영역에 대한 보안을 설정할 수 있습니다. 이렇게 하려면 "IIS AppPool\DefaultAppPool"와 같은 구문을 사용하여 애플리케이션 풀의 이름을 사용하여 보안을 설정합니다. 이 ID는 동적으로 생성되므로 서버의 노출 영역이 크게 줄어듭니다.
호환성
버전 | 참고 |
---|---|
IIS 10.0 | <add> 요소가 IIS 10.0에서 수정되지 않았습니다. |
IIS 8.5 | <add> 요소가 IIS 8.5에서 수정되지 않았습니다. |
IIS 8.0 | 특성의 managedRuntimeVersion 기본값이 로 변경 "" 되고 v4.0 에 대한 managedRuntimeVersion 값으로 추가되었습니다. |
IIS 7.5 | <add> 요소의 요소는 애플리케이션을 <applicationPools> 미리 로드할 수 있는 특성을 포함하도록 IIS 7.5에서 업데이트되었습니다. |
IIS 7.0 | <add> 컬렉션의 <applicationPools> 요소는 IIS 7.0에서 도입되었습니다. |
IIS 6.0 | 컬렉션은 <applicationPools> IIS 6.0 IIsApplicationPools 메타베이스 속성의 일부를 대체합니다. |
설치 프로그램
컬렉션은 <applicationPools>
IIS 7 이상의 기본 설치에 포함되어 있습니다.
방법
새 애플리케이션 풀을 만드는 방법
IIS(인터넷 정보 서비스) 관리자를 엽니다.
Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:
- 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
Windows 8 또는 Windows 8.1 사용하는 경우:
- Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
- 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:
- 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
Windows Vista 또는 Windows 7을 사용하는 경우:
- 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
- 관리 도구를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
연결 창에서 서버 이름을 확장한 다음 애플리케이션 풀을 클릭합니다.
작업 창에서 애플리케이션 풀 추가...를 클릭합니다.
애플리케이션 풀 추가 대화 상자에서 이름: 상자에 애플리케이션 풀의 이름을 입력합니다. .NET Framework 버전: 드롭다운 목록에서 사이트 또는 애플리케이션이 사용하는 .NET Framework 버전을 선택하고 관리형 파이프라인 모드: 드롭다운 목록에서 통합 또는 클래식을 선택한 다음 확인을 클릭합니다.
기존 사이트 또는 애플리케이션에 대한 애플리케이션 풀을 구성하는 방법
- 연결 창에서 사이트를 확장한 다음 애플리케이션 풀에 추가할 웹 사이트 또는 애플리케이션으로 이동합니다.
- 작업 창에서 고급 설정...을 클릭합니다.
- 고급 설정 대화 상자의 일반 섹션에서 애플리케이션 풀 항목을 클릭한 다음 타원 단추를 클릭합니다.
- 애플리케이션 풀 선택 대화 상자의 애플리케이션 풀: 드롭다운 상자에서 애플리케이션 풀을 선택하고 확인을 클릭한 다음 확인을 다시 클릭합니다.
구성
<add>
컬렉션의 <applicationPools>
요소는 ApplicationHost.config 파일의 서버 수준에서 구성할 수 있습니다.
특성
attribute | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|
autoStart |
선택적 부울 특성입니다. true이면 W3SVC(World Wide Web Publishing Service)에 애플리케이션 풀을 만들 때 또는 IIS가 시작될 때 자동으로 시작되어야 임을 나타냅니다. 기본값은 true 입니다. |
||||||||
CLRConfigFile |
선택적 문자열 값입니다. 애플리케이션 풀에 대한 .NET 구성 파일을 지정합니다. 참고: 이 특성은 IIS 7.5에 추가되었습니다. 기본값은 없습니다. |
||||||||
enable32BitAppOnWin64 |
선택적 부울 특성입니다. true이면 64비트 버전의 Windows를 실행하는 컴퓨터에서 32비트 애플리케이션을 실행할 수 있습니다. 기본값은 false 입니다. |
||||||||
enableConfigurationOverride |
선택적 부울 특성입니다. true이면 Web.config 파일의 위임된 설정이 이 애플리케이션 풀 내의 애플리케이션에 대해 처리됨을 나타냅니다. false이면 이 애플리케이션 풀에 대해 Web.config 파일의 모든 설정이 무시됩니다. 기본값은 true 입니다. |
||||||||
managedPipelineMode |
선택적 열거형 특성입니다. 관리되는 콘텐츠에 대한 요청을 처리하는 데 사용되는 요청 처리 모드를 지정합니다. managedPipelineMode 특성은 다음과 같은 가능한 값 중 하나일 수 있습니다.
Integrated 입니다. |
||||||||
managedRuntimeLoader |
선택적 문자열 특성입니다. 애플리케이션 풀을 미리 로드하는 데 사용할 관리되는 로더를 지정합니다. 참고: 이 특성은 IIS 7.5에 추가되었습니다. 기본값은 webengine4.dll. |
||||||||
managedRuntimeVersion |
선택적 문자열 특성입니다. 애플리케이션 풀에서 사용할 CLR 버전을 지정합니다. managedRuntimeVersion 특성은 다음과 같은 가능한 값 중 하나일 수 있습니다.
"" 입니다. |
||||||||
name |
필수 문자열 특성입니다. 서버의 애플리케이션 풀에 대한 고유한 이름을 지정합니다. |
||||||||
passAnonymousToken |
선택적 부울 특성입니다. true이면 WAS(Windows Process Activation Service)가 기본 제공 IUSR 익명 사용자 계정에 대한 토큰을 만들어 익명 인증 모듈에 전달합니다. 익명 인증 모듈은 토큰을 사용하여 기본 제공 계정을 가장합니다. PassAnonymousToken이 false이면 토큰이 전달되지 않습니다. 참고: IUSR 익명 사용자 계정은 IIS_MachineName 익명 계정을 대체합니다. IUSR 계정은 IIS 또는 다른 애플리케이션에서 사용할 수 있습니다. 설치하는 동안 할당된 권한이 없습니다. 기본값은 true 입니다. |
||||||||
queueLength |
선택적 uint 특성입니다. 향후 요청을 거부하기 전에 애플리케이션 풀에 대해 큐에 대기할 요청 수를 HTTP.sys 나타냅니다. 기본값은 1000 입니다.이 속성에 대해 설정된 값을 초과하면 IIS는 503 오류와 함께 후속 요청을 거부합니다. loadBalancerCapabilities 설정이 true이면 503이 있는 요청을 거부하는 대신 연결이 닫힙니다. loadBalancerCapabilities에 대한 자세한 내용은 애플리케이션 풀에 대한 오류 설정을 참조하세요. |
||||||||
startMode |
선택적 열거형 값입니다. 애플리케이션 풀의 시작 유형을 지정합니다. 참고: 이 특성은 IIS 7.5에 추가되었습니다. startMode 특성은 다음과 같은 가능한 값 중 하나일 수 있습니다.
OnDemand 입니다. |
자식 요소
요소 | Description |
---|---|
cpu |
CPU 선호도 및 CPU 작업을 구성합니다. |
environmentVariables |
작업자 프로세스에 전달할 환경 변수 컬렉션을 구성합니다. |
failure |
애플리케이션 풀이 실패할 때 수행할 작업을 구성합니다. |
processModel |
애플리케이션 풀에 대한 프로세스 관리 특성을 구성합니다. |
recycling |
애플리케이션 풀 재활용을 구성합니다. |
구성 샘플
다음 구성 샘플에서는 애플리케이션 풀 <add>
요소를 사용하여 Contoso라는 새 애플리케이션 풀을 만듭니다. 요소는 <recycling>
애플리케이션 풀 다시 시작에 대한 로깅을 구성하고, <periodicRestart>
요소는 애플리케이션 풀이 다시 시작될 때 구성하고 <processModel>
, 요소는 각각 30초 동안 애플리케이션 풀에서 작업자 프로세스를 종료하고 시작하기 위해 shutdownTimeLimit 및 startupTimeLimit 특성을 구성합니다. 이러한 시간 제한을 초과하면 IIS는 작업자 프로세스를 종료합니다.
<add name="Contoso">
<recycling logEventOnRecycle="Schedule">
<periodicRestart>
<schedule>
<clear />
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
<processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>
샘플 코드
다음 코드 예제에서는 Contoso라는 애플리케이션 풀을 IIS 7 이상 서버에 추가한 다음, 애플리케이션 풀을 매일 오전 3:00에 재활용하도록 설정합니다.
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].recycling.periodicRestart.schedule.[value='03:00:00']" /commit:apphost
다음 구문을 사용할 수도 있습니다.
appcmd.exe add apppool /name:"Contoso"
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].recycling.periodicRestart.schedule.[value='03:00:00']" /commit:apphost
참고
AppCmd.exe 사용하여 이러한 설정을 구성할 때 커밋 매개 변수 apphost
를 로 설정해야 합니다. 그러면 구성 설정이 ApplicationHost.config 파일의 적절한 위치 섹션에 커밋됩니다.
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();
ConfigurationElement addElement = applicationPoolsCollection.CreateElement("add");
addElement["name"] = @"Contoso";
ConfigurationElement recyclingElement = addElement.GetChildElement("recycling");
ConfigurationElement periodicRestartElement = recyclingElement.GetChildElement("periodicRestart");
ConfigurationElementCollection scheduleCollection = periodicRestartElement.GetCollection("schedule");
ConfigurationElement addElement1 = scheduleCollection.CreateElement("add");
addElement1["value"] = TimeSpan.Parse("03:00:00");
scheduleCollection.Add(addElement1);
applicationPoolsCollection.Add(addElement);
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
Dim addElement As ConfigurationElement = applicationPoolsCollection.CreateElement("add")
addElement("name") = "Contoso"
Dim recyclingElement As ConfigurationElement = addElement.GetChildElement("recycling")
Dim periodicRestartElement As ConfigurationElement = recyclingElement.GetChildElement("periodicRestart")
Dim scheduleCollection As ConfigurationElementCollection = periodicRestartElement.GetCollection("schedule")
Dim addElement1 As ConfigurationElement = scheduleCollection.CreateElement("add")
addElement1("value") = TimeSpan.Parse("03:00:00")
scheduleCollection.Add(addElement1)
applicationPoolsCollection.Add(addElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;
var addElement = applicationPoolsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso";
var recyclingElement = addElement.ChildElements.Item("recycling");
var periodicRestartElement = recyclingElement.ChildElements.Item("periodicRestart");
var scheduleCollection = periodicRestartElement.ChildElements.Item("schedule").Collection;
var addElement1 = scheduleCollection.CreateNewElement("add");
addElement1.Properties.Item("value").Value = "03:00:00";
scheduleCollection.AddElement(addElement1);
applicationPoolsCollection.AddElement(addElement);
adminManager.CommitChanges();
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection
Set addElement = applicationPoolsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso"
Set recyclingElement = addElement.ChildElements.Item("recycling")
Set periodicRestartElement = recyclingElement.ChildElements.Item("periodicRestart")
Set scheduleCollection = periodicRestartElement.ChildElements.Item("schedule").Collection
Set addElement1 = scheduleCollection.CreateNewElement("add")
addElement1.Properties.Item("value").Value = "03:00:00"
scheduleCollection.AddElement(addElement1)
applicationPoolsCollection.AddElement(addElement)
adminManager.CommitChanges()