Windows에 IIS(인터넷 정보 서비스)를 설치하면 기본적으로 빈 "기본 웹 사이트(Default Web Site)"가 생성되며, 표준 웹 HTTP 포트인 TCP 80에서 수신 대기합니다. IIS 용어로 표현하면 해당 사이트가 TCP/80 포트에 바인딩(binding)되어 있는 상태입니다. 이 사이트에 접속하려면 브라우저에 IIS 서버 이름("https://web-srv1")이나 IP 주소("https://192.168.1.100")를 입력하기만 하면 됩니다.
흥미로운 점은 단일 IIS 웹 서버가 수십~수백 개의 웹 사이트를 서비스할 수 있으며, 여러 사이트가 동일한 TCP 포트(80, 443 또는 기타 포트)에서 수신하고 응답하도록 운영할 수도 있다는 것입니다. 하지만 IIS 관리자 화면만 보고는 8080처럼 다른 포트에 바인딩하지 않고도 새 웹 사이트를 호스팅할 수 있다는 사실을 직관적으로 알기 어렵습니다. 이번 글에서는 하나의 IIS 서버에서 여러 웹 사이트를 호스팅하면서 동일한 포트와 IP 주소에 바인딩하는 방법, 그리고 서로 다른 IP 주소에 바인딩하는 방법을 차례대로 살펴보겠습니다.
IIS 웹 사이트 바인딩의 기본 개념
Windows Server에서 실행 중인 단일 IIS 웹 서버는 여러 웹 사이트를 호스팅할 수 있습니다. 다만 IIS가 들어오는 HTTP 요청을 올바른 사이트로 분배하려면 각 웹 사이트를 고유한 값으로 식별해야 합니다. IIS 웹 사이트는 다음 세 가지 속성의 조합으로 식별됩니다.
- TCP 포트 번호
- IP 주소
- 호스트 헤더(host header, 호스트 이름)
호스팅 중인 웹 사이트 정보는 IIS 메타베이스의 ServerBindings 속성에 IP:포트:호스트명 형식으로 저장됩니다. 따라서 동일한 포트와 IP 주소에서 여러 사이트를 운영하려면 반드시 고유한 호스트 헤더를 사용해야 합니다. 호스트 헤더란 클라이언트가 서버로 전송하는 HTTP 요청에 포함된 값으로, 어떤 웹 사이트를 요청하는지 지정하는 역할을 합니다. 즉, 웹 서버 측에 호스트 헤더가 설정되어 있어야 하고, DNS에는 해당 호스트 이름과 IIS 서버의 IP 주소가 일치하는 레코드가 등록되어 있어야 합니다.
예를 들어 80 포트에서 수신 중인 웹 사이트가 이미 IIS에서 실행 중이고, 같은 포트에 두 번째 사이트를 추가로 바인딩해야 한다고 가정해 보겠습니다.
IIS 관리자에서 홈 디렉터리가 c:\inetpub\TestSite인 새 웹 사이트(TestSite)를 생성합니다(웹 사이트 추가). 이 시점에서는 아직 호스트 이름을 지정하지 않습니다.
확인을 클릭하면 두 사이트가 동시에 바인딩 *:80을 사용할 수 없다는 경고가 나타납니다.
Add Website The binding '*:80:' is assigned to another site. If you assign the same binding to this site, you will only be able to start one of the sites. Are you sure that you want to add this duplicate binding?
경고에 동의하면 포트 80에 바인딩된 또 다른 사이트가 생성되지만, 첫 번째 사이트를 중지하기 전에는 이 사이트를 시작할 수 없습니다.
호스트 헤더를 활용한 멀티 사이트 호스팅
고유한 바인딩을 만들려면 두 번째 웹 사이트에 별도의 호스트 이름을 지정해야 합니다. TestSite를 마우스 오른쪽 버튼으로 클릭하고 바인딩 편집(Edit Bindings)을 선택한 후, 대상 바인딩을 선택하고 편집(Edit)을 클릭합니다.
호스트 이름(Host Name) 입력란에 사용자가 접속할 때 사용할 고유한 이름(예: TestSite)을 입력합니다.
GUI 대신 명령줄에서도 IIS 사이트 바인딩을 구성할 수 있습니다. IIS 7 이상에서는 다음 명령을 사용합니다.
C:\Windows\System32\inetsrv\appcmd.exe set site /site.name:testsite /+bindings.[protocol='http',bindingInformation='*:80:testsite']설정이 완료되면 두 번째 웹 사이트도 정상적으로 시작할 수 있습니다.
이제 남은 작업은 DNS에 서버 별칭(A 또는 CNAME) 레코드를 추가하여 IIS 웹 서버의 IP 주소 또는 호스트 이름을 가리키도록 하는 것입니다. Active Directory 도메인 환경이라면 도메인 컨트롤러에서 DNS 레코드를 생성해야 합니다.
DNS 콘솔(dnsmgmt.msc)에서 testsite 이름에 대한 CNAME 레코드를 생성하고, FQDN 대상 호스트로 IIS 서버의 도메인 이름을 지정합니다.
이 DNS 레코드는 PowerShell로도 손쉽게 생성할 수 있습니다.
Add-DnsServerResourceRecordCName -HostNameAlias web-srv1.woshub.com -Name testsite -ZoneName woshub.com브라우저에서 https://TestSite를 열어 정상적으로 접속되는지 확인합니다.
알아두면 유용한 참고 사항
도메인에 속하지 않은 독립형(standalone) IIS 서버를 사용하는 경우, 사이트 이름과 서버 IP 주소의 매핑은 C:\Windows\system32\drivers\etc\hosts 파일을 통해 처리할 수 있습니다.
바인딩 설정은 IIS 구성 파일인 C:\Windows\System32\inetsrv\config\applicationHost.config의 <sites> 섹션에 저장됩니다. 이 예제에서 해당 섹션은 다음과 같습니다.
<sites> <site name="Default Web Site" id="1"> <application path="/"> <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:" /> </bindings> </site> <site name="TestSite" id="2" serverAutoStart="true"> <application path="/" applicationPool="TestSite"> <virtualDirectory path="/" physicalPath="C:\inetpub\TestSite" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:TestSite" /> </bindings> </site> <siteDefaults> <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" /> <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites>
같은 방식으로 하나의 포트에서 수백 개의 사이트를 호스팅하고 운영할 수 있습니다.
서로 다른 IP 주소로 여러 사이트 실행하기
이번에는 IIS 웹 서버에서 서로 다른 IP 주소로 두 개의 사이트를 운영하는 방법을 알아보겠습니다. 우선 Windows Server에 별도의 VLAN 인터페이스를 추가하거나, 네트워크 어댑터(NIC)에 추가 IP 주소(별칭)를 할당해야 합니다.
이 예제에서 서버의 기본 IP 주소는 192.168.13.100이며, 동일한 네트워크 어댑터에 추가 IP 별칭 192.168.13.101을 부여하겠습니다.
Get-NetIPAddress | ft IPAddress, InterfaceAlias, SkipAsSource
New-NetIPAddress –IPAddress 192.168.13.101 –PrefixLength 24 –InterfaceAlias "Ethernet" –SkipAsSource $True다음으로 DNS 서버에 새 사이트의 A 레코드를 생성합니다. 역방향 영역에 PTR 레코드도 함께 만들려면 -CreatePtr 옵션을 추가합니다.
Add-DnsServerResourceRecordA -Name NewSite3 -IPv4Address 192.168.13.101 -ZoneName woshub.com -TimeToLive 01:00:00 –CreatePtr마지막으로 사이트 바인딩 설정을 열어 해당 사이트를 호스트의 추가 IP 주소에 바인딩하면 됩니다.
PowerShell로 IIS 사이트 바인딩 관리하기
PowerShell을 사용하면 GUI 없이도 IIS 서버의 사이트 바인딩을 관리할 수 있습니다. 이때 WebAdministration 모듈을 활용합니다.
Import-Module WebAdministration현재 존재하는 모든 IIS 사이트와 바인딩 정보를 확인하려면 다음 명령을 실행합니다.
Get-IISSite특정 사이트만 조회하려면 다음과 같이 합니다.
(Get-Website -Name NewSite).bindings.Collectionprotocol bindingInformation sslFlags -------- ------------------ -------- http 192.168.13.101:80:NewSite3 0
기존 사이트의 바인딩을 변경하려면(IP 주소, 포트, 호스트 이름 모두 수정 가능) Set-WebBinding을 사용합니다.
Set-WebBinding -Name NewSite1 -BindingInformation "192.168.13.101:80:NewSite1" -PropertyName 'Port' -Value '8080'
Set-WebBinding -Name NewSite1 -BindingInformation "192.168.13.101:8080:NewSite1" -PropertyName 'IPAddress' -Value '192.168.13.100'특정 IIS 사이트에 새 바인딩을 추가하려면 다음 명령을 실행합니다.
New-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:" -Protocol http바인딩을 제거하려면 다음 명령을 사용합니다.
Remove-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:"이처럼 IIS 웹 서버에서는 서로 다른 IP 주소를 사용하는 방법뿐 아니라, 동일한 IP 주소와 TCP 포트 번호를 공유하는 방식으로도 여러 웹 사이트를 효율적으로 운영할 수 있습니다. 호스트 헤더와 DNS 설정만 제대로 구성하면 서버 자원을 절약하면서도 수백 개의 사이트를 안정적으로 호스팅할 수 있습니다.