다음을 통해 공유


웹 사이트 <제한에 대한 제한>

개요

<limits> 요소의 <site> 요소는 대역폭의 양, 연결 수 또는 사이트에 대한 클라이언트 요청에 대한 연결 제한 시간을 제한하는 설정을 구성합니다.

참고

<limits> 요소가 특정 사이트에 대한 섹션과 <site> 섹션 모두에서 <siteDefaults> 구성된 경우 섹션의 <site> 구성이 해당 사이트에 사용됩니다.

호환성

버전 참고
IIS 10.0 <limits> 요소가 IIS 10.0에서 수정되지 않았습니다.
IIS 8.5 <limits> 요소가 IIS 8.5에서 수정되지 않았습니다.
IIS 8.0 maxUrlSegments URL에 허용되는 최대 세그먼트 수를 지정하기 위해 특성이 추가되었습니다.
IIS 7.5 <limits> 요소가 IIS 7.5에서 수정되지 않았습니다.
IIS 7.0 <limits> 요소의 <site> 요소는 IIS 7.0에서 도입되었습니다.
IIS 6.0 요소는 <limits> 다음 IIS 6.0 메타베이스 설정을 대체합니다.
  • ConnectionTimeout
  • MaxBandwidth
  • MaxConnections

설치 프로그램

<limits> 요소의 <site> 요소는 IIS 7 이상의 기본 설치에 포함됩니다.

방법

사이트에 대한 연결 제한 옵션을 구성하는 방법

  1. 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(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 연결 창에서 서버 이름을 확장하고 사이트 노드를 확장한 다음 사이트 이름을 클릭합니다.

  3. 사이트의 창에서 작업 창에서 고급 설정...을 클릭합니다.

  4. 고급 설정 대화 상자에서 제한을 확장하고 연결 제한 옵션을 지정한 다음 확인을 클릭합니다.

    고급 대화 상자의 스크린샷. 제한이 강조 표시되고 확장됩니다.

구성

특성

attribute Description
connectionTimeout 선택적 timeSpan 특성입니다.

비활성으로 간주되는 연결을 끊기 전에 IIS가 대기하는 시간(초)을 지정합니다. 연결은 다음과 같은 이유로 비활성으로 간주될 수 있습니다.
  • HTTP.sys Timer_ConnectionIdle 타이머가 만료되었습니다. 연결이 만료되어 유휴 상태로 유지됩니다.
  • HTTP.sys Timer_EntityBody 타이머가 만료되었습니다. 요청 엔터티 본문이 도착하기 전에 연결이 만료되었습니다. 요청에 엔터티 본문이 있는 것이 분명하면 HTTP API는 Timer_EntityBody 타이머를 켭니다. 처음에는 이 타이머의 제한이 connectionTimeout 값으로 설정됩니다. 이 요청에 대해 다른 데이터 표시가 수신될 때마다 HTTP API는 타이머를 다시 설정하여 connectionTimeout 특성에 지정된 대로 연결에 더 많은 시간을 제공합니다.
  • HTTP.sys Timer_AppPool 타이머가 만료되었습니다. 서버 애플리케이션이 큐를 제거하고 처리하기 위해 애플리케이션 풀 큐에서 요청이 너무 오래 대기했기 때문에 연결이 만료되었습니다. 이 시간 제한 기간은 connectionTimeout입니다.
기본값은 (2분)입니다 00:02:00 .
maxBandwidth 선택적 uint 특성입니다.

사이트에 사용되는 최대 네트워크 대역폭(초당 바이트)을 지정합니다. IIS 작업으로 네트워크 오버로드를 방지하려면 이 설정을 사용합니다.

기본값은 4294967295입니다.
maxConnections 선택적 uint 특성입니다.

사이트의 최대 연결 수를 지정합니다. 이 설정을 사용하여 동시 클라이언트 연결 수를 제한합니다.

기본값은 4294967295입니다.
maxurlSegments 선택적 uint 특성입니다.

URL에 허용되는 최대 세그먼트 수를 지정합니다.

기본값은 32입니다.

자식 요소

없음

구성 샘플

다음 구성 샘플에서는 최대 대역폭이 초당 65,536바이트로 설정되고 최대 연결 수가 1024로 설정되고 연결 제한 시간이 1분으로 설정된 웹 사이트를 보여 줍니다.

<sites>
   <site name="Default Web Site" id="1" serverAutoStart="true">
      <application path="/">
         <virtualDirectory path="/"
            physicalPath="%SystemDrive%\inetpub\wwwroot" />
      </application>
      <bindings>
         <binding protocol="http"
            bindingInformation="*:80:" />
      </bindings>
     <limits maxBandwidth="65536"
         maxConnections="1024"
         connectionTimeout="00:01:00" />
   </site>
</sites>

샘플 코드

다음 코드 샘플은 초당 최대 대역폭 65,536바이트, 최대 연결 1024개, 연결 시간 제한 1분으로 기본 웹 사이트를 구성합니다.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.maxBandwidth:65536" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.maxConnections:1024" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.connectionTimeout:00:01:00" /commit:apphost

참고

AppCmd.exe 사용하여 이러한 설정을 구성할 때 commit 매개 변수 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 sitesSection = config.GetSection("system.applicationHost/sites");
         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();

         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
         if (siteElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement limitsElement = siteElement.GetChildElement("limits");
         limitsElement["maxBandwidth"] = 65536;
         limitsElement["maxConnections"] = 1024;
         limitsElement["connectionTimeout"] = TimeSpan.Parse("00:01:00");

         serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

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 sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
      Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection

      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Default Web Site")
      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim limitsElement As ConfigurationElement = siteElement.GetChildElement("limits")
      limitsElement("maxBandwidth") = 65536
      limitsElement("maxConnections") = 1024
      limitsElement("connectionTimeout") = TimeSpan.Parse("00:01:00")

       serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");

var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Default Web Site"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);

var limitsElement = siteElement.ChildElements.Item("limits");
limitsElement.Properties.Item("maxBandwidth").Value = 65536;
limitsElement.Properties.Item("maxConnections").Value = 1024;
limitsElement.Properties.Item("connectionTimeout").Value = "00:01:00";

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")

Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Default Web Site"))
If siteElementPos = -1 Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)

Set limitsElement = siteElement.ChildElements.Item("limits")
limitsElement.Properties.Item("maxBandwidth").Value = 65536
limitsElement.Properties.Item("maxConnections").Value = 1024
limitsElement.Properties.Item("connectionTimeout").Value = "00:01:00"

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function