Skip to content
VDS · Windows Server

IIS: Windows에서 사이트 운영하기

VPS에 IIS 웹 서버를 설치하고, 자신의 도메인으로 첫 사이트를 게시하고, 인증서를 발급하고, 로그에 파묻히지 않는 방법을 설명해요.

업데이트 2026년 8월 23일

IIS는 Windows Server에 내장된 웹 서버예요. ASP.NET 애플리케이션, 정적 콘텐츠, 그리고 로컬 포트에서 수신 대기하는 서비스 앞의 리버스 프록시로 잘 동작해요.

설치

Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Asp-Net48, Web-Http-Redirect, Web-Dyn-Compression

방화벽에서 포트를 열어 주세요:

New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow

제어판의 “개요” /hosting/vds/m/<id>에 있는 내 머신 주소에서 시작 페이지가 열리는지 확인해 보세요. 열리지 않으면 Windows 방화벽을 참고하세요.

첫 사이트

Import-Module WebAdministration
New-Item -ItemType Directory C:\sites\example
Set-Content C:\sites\example\index.html "<h1>It works</h1>"

New-WebAppPool -Name "example"
New-Website -Name "example" -Port 80 -HostHeader "example.ru" `
  -PhysicalPath "C:\sites\example" -ApplicationPool "example"

호스트 헤더(-HostHeader)를 사용하면 하나의 주소에서 여러 사이트를 호스팅할 수 있어요. IIS는 도메인으로 사이트를 구분해요. 도메인은 A 레코드로 내 머신 주소를 가리켜야 해요.

사이트에는 디렉터리에 대한 최소한의 권한, 즉 읽기 권한만 있으면 돼요:

icacls C:\sites\example /grant "IIS AppPool\example:(OI)(CI)R" /T

HTTPS 인증서

무료 인증서를 받는 가장 쉬운 방법은 win-acme 클라이언트예요. wacs.exe를 내려받아 관리자 권한으로 실행하고 목록에서 사이트를 선택하면 인증서를 발급하고, 사이트에 바인딩하고, 갱신 작업을 만들어 줘요.

바인딩을 확인하려면:

Get-WebBinding -Name "example"
New-WebBinding -Name "example" -Protocol https -Port 443 -HostHeader "example.ru" -SslFlags 1

인증서를 발급하려면 외부에서 포트 80이 열려 있어야 해요. 도메인 검증이 이 포트를 통해 이루어져요.

IIS 뒤의 애플리케이션

서비스(Node, Python, .NET Kestrel)가 127.0.0.1:5000에서 수신 대기한다면 URL Rewrite와 Application Request Routing 모듈을 설치하고, 프록시를 활성화한 뒤 사이트의 web.config에 다음을 추가하세요:

<rule name="proxy" stopProcessing="true">
  <match url="(.*)" />
  <action type="Rewrite" url="http://127.0.0.1:5000/{R:1}" />
</rule>

이렇게 하면 인증서가 있는 IIS만 외부에 노출되고, 애플리케이션은 localhost에 남아 있어요.

운영

Get-Website | Select-Object Name, State, PhysicalPath
Restart-WebAppPool example
Get-WebAppPoolState

로그는 C:\inetpub\logs\LogFiles에 저장되며 무한정 커져요. 40 GB 디스크에서는 금방 쌓여요. IIS Manager의 “Logging” 섹션에서 순환(일별 파일)을 설정하고, 예약 작업으로 오래된 로그를 삭제하세요:

Get-ChildItem C:\inetpub\logs\LogFiles -Recurse -File |
  Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) | Remove-Item -Force

자주 발생하는 오류

  • 오류 500.19 — web.config가 손상되었거나 모듈이 없어요. 로컬 요청에 대해 자세한 메시지를 활성화하면 오류 텍스트에서 정확한 원인을 볼 수 있어요.
  • 애플리케이션 풀이 저절로 중지돼요. 신속 실패 보호가 작동한 거예요. 사이트가 충돌하면 IIS가 이를 종료해요. 애플리케이션 로그(Get-WinEvent -LogName Application -MaxEvents 30)에서 원인을 찾아보세요.
  • 주소로는 사이트가 열리지만 도메인으로는 열리지 않아요. 호스트 헤더가 일치하지 않거나 DNS가 아직 갱신되지 않았어요.
  • 게시 후 403이 발생해요. 애플리케이션 풀에 디렉터리 권한이 부여되지 않았어요.

사이트 디렉터리는 C:\inetpub 밖에 두고 C:\sites 같은 별도 폴더에 두세요. 백업이 쉬워지고 데이터 손실 없이 시스템을 재설치할 수 있어요.