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와 관리 도구를 설치합니다
- 서버 관리자 → 관리 → 역할 및 기능 추가에서 WEB1을 선택합니다.
- 웹 서버(IIS) 역할과 필요한 관리 도구를 선택합니다.
- 일반 HTTP 기능에서 정적 콘텐츠·기본 문서, 상태 및 진단에서 HTTP 로깅을 확인합니다.
- 정적 사이트에 필요하지 않은 실행 환경을 한꺼번에 추가하지 않고 설치합니다.
- 결과와 재부팅 요구를 확인하고 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>
- IIS 관리자 → 응용 프로그램 풀에서 LabSitePool을 새로 만듭니다.
- 정적 HTML만 제공하므로 .NET CLR 버전은 관리 코드 없음으로 선택합니다.
- 풀 고급 설정 → ID가 ApplicationPoolIdentity인지 확인합니다.
- 폴더 속성 → 보안에서 위치를 WEB1로 고르고 IIS AppPool\LabSitePool을 추가합니다.
- 읽기 및 실행·폴더 내용 보기·읽기만 부여하고 SYSTEM·관리자 권한은 유지합니다.
응용 프로그램 풀 ID는 풀마다 구분되는 가상 계정입니다. 웹 콘텐츠 읽기 때문에 관리자나 모든 권한을 부여하지 않습니다. 파일을 올리는 관리자의 쓰기 권한과 웹 프로세스의 읽기 권한을 분리합니다.
새 사이트와 익명 인증을 설정합니다
- 사이트 → 웹사이트 추가에서 이름 LabSite, 풀 LabSitePool, 경로 C:\Sites\LabSite를 지정합니다.
- 바인딩은 http, IP는 172.24.50.30, 포트 8080, 호스트 이름은 비워 둡니다.
- 사이트를 만든 뒤 LabSite → 인증 → 익명 인증 → 편집에서 응용 프로그램 풀 ID를 선택합니다.
- 사이트의 기본 문서에 index.html이 있는지 확인합니다.
- 바인딩·물리 경로·풀의 상태를 확인하고 사이트를 시작합니다.
익명 인증의 기본 사용자 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 규칙과 시험 폴더만 대상으로 하고 기본 사이트나 다른 사이트의 설정을 함께 삭제하지 않습니다.




