คำตอบสั้น ๆ: ติดตั้ง IIS บน Windows Server ผ่าน Server Manager หรือ PowerShell แล้วสร้างเว็บไซต์แรกที่ผูกกับชื่อโดเมน พร้อมกำหนดสิทธิ์โฟลเดอร์และแก้ข้อผิดพลาดที่พบบ่อย
คู่มือนี้อธิบาย Windows Server ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
IIS (Internet Information Services) คือ Web Server ที่มากับ Windows Server เหมาะสำหรับเว็บไซต์และเว็บแอปที่พัฒนาด้วย ASP.NET หรือ ASP.NET Core และใช้เป็นหน้าบ้านให้โปรแกรมที่ต้องให้บริการผ่าน HTTP หรือ HTTPS IIS เป็น Role ที่ไม่ได้ติดตั้งมาตั้งแต่แรก ต้องเพิ่มเองผ่าน Server Manager หรือ PowerShell
บทความนี้พาติดตั้ง IIS ตรวจว่าเว็บเริ่มต้นทำงาน แล้วสร้างเว็บไซต์ใหม่ที่ผูกกับชื่อโดเมนของคุณ
สิ่งที่ต้องเตรียม (Windows Server)
- Windows Server 2019 หรือ 2022 แบบมี Desktop Experience (ถ้าเป็น Server Core ใช้วิธี PowerShell ได้ แต่ไม่มีหน้าจอ IIS Manager ในเครื่อง)
- บัญชีในกลุ่ม Administrators
- ชื่อโดเมนที่ชี้ A Record มายัง IP ของเซิร์ฟเวอร์แล้ว (ถ้าต้องการเข้าผ่านชื่อโดเมน) ดูวิธีได้ที่ ชี้โดเมนไปยังเซิร์ฟเวอร์ด้วย A Record หรือเปลี่ยน Name Server
- ถ้าเครื่องมีโปรแกรมอื่นใช้พอร์ต 80 หรือ 443 อยู่ ต้องย้ายหรือหยุดโปรแกรมนั้นก่อน
ขั้นตอนที่ 1: ติดตั้ง IIS
แบบที่ 1: ผ่าน Server Manager
- เปิด Server Manager คลิก Manage > Add Roles and Features
- หน้า Before You Begin กด Next หน้า Installation Type เลือก Role-based or feature-based installation
- หน้า Server Selection เลือกเซิร์ฟเวอร์ปัจจุบัน แล้วกด Next
- หน้า Server Roles ติ๊ก Web Server (IIS) จะมีหน้าต่างถามให้เพิ่ม Management Tools กด Add Features
- กด Next ผ่านหน้า Features ไปจนถึงหน้า Role Services ของ Web Server ถ้าเว็บเป็น ASP.NET (.NET Framework) ให้ติ๊ก Application Development > ASP.NET 4.8 (Windows Server 2019 อาจแสดงเป็น ASP.NET 4.7 ขึ้นกับอัปเดตที่ติดตั้ง)
- กด Install รอจนขึ้นว่า Installation succeeded แล้วกด Close
แบบที่ 2: ผ่าน PowerShell
เปิด Windows PowerShell แบบ Run as Administrator แล้วรัน
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
เมื่อเสร็จจะแสดงตารางที่มี Success True และ Restart Needed No ถ้าต้องการ ASP.NET สำหรับ .NET Framework ให้ติดตั้งเพิ่ม
Install-WindowsFeature -Name Web-Asp-Net45
สำหรับแอป ASP.NET Core ไม่ต้องใช้ฟีเจอร์นี้ แต่ต้องติดตั้ง ASP.NET Core Hosting Bundle เวอร์ชันที่ตรงกับแอป ดาวน์โหลดได้จากหน้า .NET ของ Microsoft ที่ https://dotnet.microsoft.com/download/dotnet
ขั้นตอนที่ 2: ทดสอบหน้าเว็บเริ่มต้น
หลังติดตั้ง IIS จะสร้างเว็บไซต์ชื่อ Default Web Site ที่โฟลเดอร์ C:\inetpub\wwwroot และรับการเชื่อมต่อที่พอร์ต 80 ทดสอบในเครื่องด้วย
Invoke-WebRequest -Uri http://localhost -UseBasicParsing | Select-Object StatusCode
ควรได้ StatusCode 200 จากนั้นลองเปิด http://IP-ของเซิร์ฟเวอร์ จากเบราว์เซอร์ในเครื่องของคุณ จะเห็นหน้าต้อนรับของ IIS
การติดตั้ง IIS จะเปิดกฎ Firewall ชื่อ World Wide Web Services (HTTP Traffic-In) ให้ด้วย ตรวจได้ด้วยคำสั่ง
Get-NetFirewallRule -DisplayName "World Wide Web Services*" | Select-Object DisplayName, Enabled
ถ้ากฎยังไม่เปิด หรือจะเปิด HTTPS ด้วย ดูวิธีเปิดพอร์ตที่ เปิด Port บน Windows Defender Firewall หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ต 80 และ 443 เพิ่มด้วย
ขั้นตอนที่ 3: สร้างเว็บไซต์ใหม่สำหรับโดเมนของคุณ
แนะนำให้แยกเว็บไซต์แต่ละโดเมนไว้คนละโฟลเดอร์และคนละ Application Pool เพื่อไม่ให้ปัญหาของเว็บหนึ่งกระทบอีกเว็บ
สร้างโฟลเดอร์และกำหนดสิทธิ์
New-Item -ItemType Directory -Path C:\inetpub\example.com
icacls "C:\inetpub\example.com" /grant "IIS_IUSRS:(OI)(CI)RX"
icacls จะแสดง Successfully processed 1 files คำสั่งนี้ให้สิทธิ์อ่านและรันไฟล์แก่กลุ่มที่ IIS ใช้ ถ้าแอปต้องเขียนไฟล์ในโฟลเดอร์ย่อย เช่น uploads ให้สิทธิ์ Modify เฉพาะโฟลเดอร์นั้น ไม่ใช่ทั้งเว็บ
สร้างเว็บไซต์ผ่าน IIS Manager
- เปิด IIS Manager (Server Manager > Tools > Internet Information Services (IIS) Manager หรือพิมพ์
inetmgr) - ที่แผงซ้าย ขยายชื่อเครื่อง คลิกขวาที่ Sites เลือก Add Website...
- Site name ใส่
example.comระบบจะสร้าง Application Pool ชื่อเดียวกันให้ - Physical path เลือก
C:\inetpub\example.com - Binding: Type
http, IP addressAll Unassigned, Port80, Host name ใส่www.example.com - กด OK
Binding หนึ่งรายการรับได้หนึ่ง Host name ถ้าต้องการให้ example.com (ไม่มี www) ใช้ได้ด้วย ให้คลิกเว็บไซต์แล้วเลือก Bindings... ที่แผงขวา กด Add แล้วใส่ Host name เพิ่ม
หรือสร้างด้วย PowerShell
Import-Module IISAdministration
New-IISSite -Name "example.com" -PhysicalPath "C:\inetpub\example.com" -BindingInformation "*:80:www.example.com"
New-IISSiteBinding -Name "example.com" -BindingInformation "*:80:example.com" -Protocol http
วิธีนี้จะใช้ Application Pool ชื่อ DefaultAppPool ถ้าต้องการแยก Pool ให้สร้างผ่าน IIS Manager ที่หัวข้อ Application Pools แล้วเปลี่ยนในเมนู Basic Settings ของเว็บไซต์