เมื่อคุณติดตั้ง Internet Information Services (IIS) บน Windows จะมี "Default Web Site" ว่างๆ ถูกสร้างขึ้นโดยค่าเริ่มต้นและรอฟังที่พอร์ต HTTP มาตรฐานคือ TCP 80 ในศัพท์ IIS หมายความว่าเว็บไซต์นี้ถูกผูกกับพอร์ต TCP/80 ในการเปิดเว็บไซต์นี้ ให้ป้อนชื่อของเซิร์ฟเวอร์ IIS ("https://web-srv1") หรือที่อยู่ IP ของมัน ("https://192.168.1.100") ในเบราว์เซอร์ของคุณ เซิร์ฟเว็บ IIS เดียวสามารถให้บริการเว็บไซต์หลายสิบหรือหลายร้อยเว็บไซต์ และคุณสามารถรันเว็บไซต์หลายเว็บไซต์บนมัน ได้รับฟังและตอบสนองบนพอร์ต TCP เดียวกัน (80, 443, หรืออื่นๆ) อย่างไรก็ตาม อินเทอร์เฟซของ IIS Manager ไม่ได้ชี้ให้เห็นชัดเจนว่าคุณสามารถโฮสต์เว็บไซต์อีกเว็บหนึ่งได้โดยไม่ต้องผูกกับพอร์ตอื่น (เช่น 8080) ในบทความนี้เราจะแสดงวิธีโฮสต์เว็บไซต์หลายเว็บไซต์บนเซิร์ฟเวอร์ IIS เดียวกันและผูกกับพอร์ตและ IP Address เดียวกัน หรือ IP Address ที่ต่างกัน
IIS Web Site Binding
เซิร์ฟเว็บ IIS เดียวที่รันบน Windows Server สามารถโฮสต์เว็บไซต์หลายเว็บไซต์ได้ อย่างไรก็ตาม เพื่อให้ IIS แจกจ่ายคำขอ HTTP ได้อย่างถูกต้อง แต่ละเว็บไซต์ต้องถูกระบุด้วยค่าที่ไม่ซ้ำกันบางอย่าง ในกรณีของเว็บไซต์ IIS ประกอบด้วยสามแอตทริบิวต์ที่ทำให้เกิดการรวมกันที่ไม่ซ้ำกันสำหรับแต่ละเว็บไซต์ ได้แก่:
- หมายเลขพอร์ต TCP
- ที่อยู่ IP
- Host Header (ชื่อโฮสต์)
ข้อมูลเกี่ยวกับเว็บไซต์ที่โฮสต์ไว้ถูกเก็บในแอตทริบิวต์ ServerBindings ของ IIS Metabase ในรูปแบบต่อไปนี้: IP:Port:Hostname ดังนั้น หากคุณต้องการโฮสต์เว็บไซต์หลายเว็บไซต์บนพอร์ตและ IP Address เดียวกัน คุณจะต้องใช้ Host Header ที่ไม่ซ้ำกัน Host Header คืออะไร? Host Header เป็นส่วนหนึ่งของคำขอ HTTP ไปยังเซิร์ฟเวอร์ที่ส่งโดยไคลเอนต์ซึ่งระบุว่าคำขอนั้นไปที่เว็บไซต์ใด ตามลำดับ Host Header นี้ต้องระบุฝั่งเซิร์ฟเว็บ และ DNS ต้องมีระเบียนที่ถูกต้องที่ตรงกับ Hostname และที่อยู่ IP ของเซิร์ฟเว็บ IIS
การโฮสต์เว็บไซต์หลายเว็บไซต์บน IIS โดยใช้ Host Headers
สมมติว่าคุณมีเว็บไซต์ที่รันบน IIS และรอฟังพอร์ต 80 และคุณต้องการผูกเว็บไซต์ที่สองกับพอร์ตเดียวกัน
ใน IIS Manager ให้สร้างเว็บไซต์อีกอันหนึ่ง (Add Website) ชื่อ TestSite ซึ่งไฟล์จะอยู่ที่ c:\inetpub\TestSite (อย่าระบุ Hostname ในตอนนี้)
หลังจากคลิก OK จะมีคำเตือนว่าคุณไม่สามารถใช้ Binding *:80 สำหรับทั้งสองเว็บไซต์ได้
ยอมรับคำเตือนนี้ ดังนั้นคุณจะได้เว็บไซต์อีกอันที่ผูกกับพอร์ต 80 คุณไม่สามารถเริ่มต้นมันได้โดยไม่หยุดเว็บไซต์แรก
เพื่อสร้าง Binding ที่ไม่ซ้ำกัน ให้ระบุชื่ออื่น (Host Name) สำหรับเว็บไซต์ IIS ที่สอง คลิกขวา TestSite และเลือก Edit Bindings เลือก Binding ที่คุณต้องการและคลิก Edit
ระบุ Host Name ที่ไม่ซ้ำกันซึ่งผู้ใช้จะใช้เพื่อเข้าถึง เช่น TestSite ในฟิลด์ Host Name
คุณสามารถกำหนดค่า IIS Site Binding โดยใช้ Command Prompt ในกรณีนี้ สำหรับ IIS 7 หรือใหม่กว่า คำสั่งสำหรับกำหนดค่า Binding จะมีลักษณะดังนี้:
C:\Windows\System32\inetsrv\appcmd.exe set site /site.name:testsite /+bindings.[protocol='http',bindingInformation='*:80:testsite']
ตอนนี้คุณสามารถเริ่มเว็บไซต์ที่สองได้เช่นกัน
สิ่งที่เหลือคือเพิ่ม DNS Alias สำหรับเซิร์ฟเวอร์ (A หรือ CNAME) ที่ชี้ไปที่ที่อยู่ IP หรือชื่อโฮสต์ของเซิร์ฟเว็บ IIS ของคุณ หากคุณใช้โดเมน Active Directory คุณต้องสร้างระเบียน DNS บนโดเมนคอนโทรลเลอร์
คุณสามารถสร้างระเบียน CNAME สำหรับชื่อ testsite ในคอนโซล DNS (dnsmgmt.msc) และระบุชื่อโดเมนของเซิร์ฟเวอร์ IIS ของคุณเป็น FQDN Target Host
ระเบียน DNS นี้สามารถสร้างได้โดยใช้ PowerShell:
Add-DnsServerResourceRecordCName -HostNameAlias web-srv1.woshub.com -Name testsite -ZoneName woshub.com
ลองเปิด https://TestSite ในเบราว์เซอร์ของคุณ มันควรเปิดได้สำเร็จ
- หากคุณใช้เซิร์ฟเวอร์ IIS แบบสแตนด์อโลน การแมปชื่อเว็บไซต์ไปยังที่อยู่ IP ของเซิร์ฟเวอร์ทำผ่านไฟล์
C:\Windows\system32\drivers\etc\hosts - การตั้งค่า Binding ถูกเก็บในส่วน <sites> ของไฟล์ config IIS
C:\Windows\System32\inetsrv\config\applicationHost.config - เช่นเดียวกัน คุณสามารถโฮสต์และรันเว็บไซต์หลายร้อยเว็บไซต์บนพอร์ตเดียวกันของเซิร์ฟเว็บ IIS ของคุณได้
การรันเว็บไซต์หลายเว็บไซต์ด้วย IP Address ที่ต่างกันบน IIS
ตอนนี้ลองรันสองเว็บไซต์บนเซิร์ฟเว็บ IIS ที่ที่อยู่ IP ต่างกัน ก่อนอื่น คุณต้องเพิ่ม VLAN Interface แยกต่างหากบน Windows Server หรือเพียงแค่กำหนดที่อยู่ IP เพิ่มเติม (Alias) ให้กับ NIC ของคุณ
ในตัวอย่างนี้ เซิร์ฟเวอร์มีที่อยู่ IP หลัก 192.168.13.100 และฉันจะเพิ่ม IP Alias เพิ่มเติม 192.168.13.101 ให้กับแอดอัปเตอร์เครือข่ายเดียวกัน:
Get-NetIPAddress | ft IPAddress, InterfaceAlias, SkipAsSource
New-NetIPAddress –IPAddress 192.168.13.101 –PrefixLength 24 –InterfaceAlias "Ethernet" –SkipAsSource $True
ตอนนี้คุณต้องสร้างระเบียน A สำหรับเว็บไซต์ใหม่บนเซิร์ฟเวอร์ DNS (เราจะสร้างระเบียน PTR เพิ่มเติมในโซนย้อนกลับด้วยตัวเลือก –CreatePtr):
Add-DnsServerResourceRecordA -Name NewSite3 -IPv4Address 192.168.13.101 -ZoneName woshub.com -TimeToLive 01:00:00 –CreatePtr
เหลือเพียงเปิดการตั้งค่า Site Binding และผูกเว็บไซต์กับที่อยู่ IP เพิ่มเติมของโฮสต์ของคุณ
การจัดการ IIS Site Bindings โดยใช้ PowerShell
คุณสามารถจัดการ Binding ของเว็บไซต์บนเซิร์ฟเวอร์ IIS โดยใช้ PowerShell สำหรับสิ่งนี้ ใช้โมดูล WebAdministration:
Import-Module WebAdministration
แสดงข้อมูลเกี่ยวกับเว็บไซต์ IIS ทั้งหมดที่มีอยู่และ Bindings ของพวกมัน:
Get-IISSite
หรือเกี่ยวกับเว็บไซต์เดียว:
(Get-Website -Name NewSite).bindings.Collection
เพื่อเปลี่ยน Binding ของเว็บไซต์นี้ (คุณสามารถเปลี่ยนที่อยู่ IP, พอร์ต หรือชื่อ):
Set-WebBinding -Name NewSite1 -BindingInformation "192.168.13.101:80:NewSite3" -PropertyName 'Port' -Value '8080'
Set-WebBinding -Name NewSite1 -BindingInformation "192.168.13.101:8080:NewSite1" -PropertyName 'IPAddress' -Value '192.168.13.100'
เพื่อเพิ่ม Binding ใหม่ให้กับเว็บไซต์ IIS เฉพาะ ให้รัน:
New-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:" -Protocol http
เพื่อลบ Binding:
Remove-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:"
ดังนั้น คุณสามารถรันเว็บไซต์หลายเว็บไซต์บนเซิร์ฟเว็บ IIS ได้ทั้งบนที่อยู่ IP ที่ต่างกันและบนที่อยู่ IP และหมายเลขพอร์ต TCP เดียวกัน