Windows Server 2025 / IIS를 설치하고 첫 번째 웹사이트를 게시하는 방법

Windows Server 2025에서 IIS 역할과 정적 콘텐츠 기능을 설치하면 HTML 파일을 웹사이트로 제공할 수 있습니다. 사이트의 물리 경로·응용 프로그램 풀·바인딩·읽기 권한을 지정하고, 서버 내부와 별도 클라이언트에서 차례로 접속을 확인합니다.

웹 서버용 실습 환경을 준비합니다

IIS(Internet Information Services)는 Windows의 웹 서버입니다. 이 글은 데이터베이스나 프레임워크 없이 HTML 한 장을 제공하는 정적 사이트부터 구성합니다. PHP·ASP.NET 앱은 별도의 실행 환경과 앱별 배포 설정이 필요합니다.

기존 DC1·FS1에 역할을 더 얹지 않고, 같은 격리 실습망에 별도 서버 WEB1을 준비합니다. 예시 IPv4는 172.24.50.30/24, DNS는 DC1의 172.24.50.10입니다. 중복 주소가 없는지 확인하고 ad.example.test의 멤버 서버로 구성합니다. VM 자원은 강좌의 기본 실습 예시를 따르되 동시에 켤 서버 수에 맞춰 조정하세요.

본문은 WEB1의 관리자 Windows PowerShell과 IIS 관리자를 사용합니다. 사이트 이름은 LabSite, 풀은 LabSitePool, 폴더는 C:\Sites\LabSite, HTTP 포트는 8080입니다. 기본 사이트의 80번 바인딩을 덮어쓰지 않고 새 사이트를 구분합니다. 공개 인터넷에 노출하는 구성은 포함하지 않습니다.

IIS와 관리 도구를 설치합니다

  1. 서버 관리자 → 관리 → 역할 및 기능 추가에서 WEB1을 선택합니다.
  2. 웹 서버(IIS) 역할과 필요한 관리 도구를 선택합니다.
  3. 일반 HTTP 기능에서 정적 콘텐츠·기본 문서, 상태 및 진단에서 HTTP 로깅을 확인합니다.
  4. 정적 사이트에 필요하지 않은 실행 환경을 한꺼번에 추가하지 않고 설치합니다.
  5. 결과와 재부팅 요구를 확인하고 IIS 관리자(inetmgr)를 엽니다.

GUI 대신 아래 명령으로 같은 역할과 관리 도구를 준비할 수 있습니다. 기존 설치가 있다면 기능 상태부터 확인합니다.

Install-WindowsFeature Web-Server -IncludeManagementTools
Get-WindowsFeature Web-Static-Content,Web-Default-Doc,Web-Http-Logging,Web-Mgmt-Console

정적 콘텐츠와 기본 문서가 설치되어 있어야 파일 제공과 루트 주소의 index.html 선택을 실습할 수 있습니다. 역할 설치 성공만으로 사용자 지정 사이트의 권한과 네트워크까지 완성되는 것은 아닙니다.

시험 HTML 파일과 전용 풀을 만듭니다

C:\Sites\LabSite가 이미 있다면 기존 용도를 먼저 확인하고 이 예제를 그대로 실행하지 않습니다. 새 폴더에 index.html을 UTF-8로 저장합니다. 메모장에서 저장할 때 확장자가 index.html.txt가 되지 않도록 파일 이름과 실제 확장자를 확인하세요.

<!doctype html>
<html lang="ko">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>LabSite</title></head>
<body><h1>Windows Server 2025 웹 서버 실습</h1><p>WEB1의 LabSite에서 제공한 페이지입니다.</p></body>
</html>
  1. IIS 관리자 → 응용 프로그램 풀에서 LabSitePool을 새로 만듭니다.
  2. 정적 HTML만 제공하므로 .NET CLR 버전은 관리 코드 없음으로 선택합니다.
  3. 풀 고급 설정 → ID가 ApplicationPoolIdentity인지 확인합니다.
  4. 폴더 속성 → 보안에서 위치를 WEB1로 고르고 IIS AppPool\LabSitePool을 추가합니다.
  5. 읽기 및 실행·폴더 내용 보기·읽기만 부여하고 SYSTEM·관리자 권한은 유지합니다.

응용 프로그램 풀 ID는 풀마다 구분되는 가상 계정입니다. 웹 콘텐츠 읽기 때문에 관리자나 모든 권한을 부여하지 않습니다. 파일을 올리는 관리자의 쓰기 권한과 웹 프로세스의 읽기 권한을 분리합니다.

새 사이트와 익명 인증을 설정합니다

  1. 사이트 → 웹사이트 추가에서 이름 LabSite, 풀 LabSitePool, 경로 C:\Sites\LabSite를 지정합니다.
  2. 바인딩은 http, IP는 172.24.50.30, 포트 8080, 호스트 이름은 비워 둡니다.
  3. 사이트를 만든 뒤 LabSite → 인증 → 익명 인증 → 편집에서 응용 프로그램 풀 ID를 선택합니다.
  4. 사이트의 기본 문서에 index.html이 있는지 확인합니다.
  5. 바인딩·물리 경로·풀의 상태를 확인하고 사이트를 시작합니다.

익명 인증의 기본 사용자 IUSR와 응용 프로그램 풀 ID는 같지 않습니다. 이 실습은 익명 인증 설정에서 풀 ID를 명시적으로 골라 앞서 부여한 폴더 권한과 일치시킵니다. 인증 오류를 해결하려고 Everyone에 쓰기 권한을 주지 않습니다.

WEB1에서 http://172.24.50.30:8080/index.html과 루트 주소를 각각 엽니다. 두 주소에서 시험 문장이 표시되어야 합니다. New-Website 참조에서도 사이트의 경로·포트·풀 매개변수를 확인할 수 있습니다.

클라이언트 접속과 오류 원인을 확인합니다

WEB1이 도메인 프로필로 연결된 것을 확인한 뒤 방화벽 고급 보안에서 TCP 8080 인바운드 규칙을 만듭니다. 원격 주소 범위는 격리 실습망 172.24.50.0/24로 한정하고 이름을 Lab-IIS-HTTP-8080으로 기록합니다. 다른 프로필이라면 도메인 연결부터 조사하고 규칙을 전체 프로필·모든 주소로 확대하지 않습니다.

CLIENT1에서 Test-NetConnection으로 포트를 확인하고 브라우저로 같은 URL을 엽니다. 서버 로컬에서는 되지만 클라이언트에서 안 되면 주소·스위치·라우팅·방화벽을 분리해 조사합니다.

Test-NetConnection -ComputerName 172.24.50.30 -Port 8080
증상 확인 지점
연결 시간 초과 경로·방화벽·리스닝 포트
403.14 기본 문서 존재와 설정; 디렉터리 검색을 켜서 우회하지 않음
401.3 익명 인증 ID와 NTFS 읽기 권한
404 파일 이름·확장자·물리 경로
503 응용 프로그램 풀 중지·빠른 실패 보호·이벤트

IIS 로그는 사이트 ID별 W3SVC 폴더에 구분되며 기본 로그 경로는 C:\inetpub\logs\LogFiles입니다. 실제 사이트 ID와 로그 시각을 확인해 요청과 연결합니다. 정리 시에는 만든 사이트·풀·8080 규칙과 시험 폴더만 대상으로 하고 기본 사이트나 다른 사이트의 설정을 함께 삭제하지 않습니다.