Khi bạn cài đặt Internet Information Services (IIS) trên Windows, một "Default Web Site" trống được tạo mặc định và lắng nghe trên cổng web HTTP tiêu chuẩn – TCP 80. Về mặt IIS, điều này nghĩa là site này được bind (liên kết) với cổng TCP/80. Để mở site này, chỉ cần nhập tên máy chủ IIS ("https://web-srv1") hoặc địa chỉ IP của nó ("https://192.168.1.100") vào trình duyệt. Một máy chủ web IIS đơn lẻ có thể phục vụ hàng chục đến hàng trăm website, và bạn có thể chạy nhiều website trên nó, lắng nghe và phản hồi trên cùng một cổng TCP (80, 443, hoặc bất kỳ cổng nào). Tuy nhiên, giao diện IIS Manager không làm cho rõ ràng việc bạn có thể lưu trữ một website khác mà không cần bind nó vào một cổng khác (ví dụ, 8080). Trong bài viết này, chúng tôi sẽ chỉ cách lưu trữ nhiều website trên cùng một máy chủ IIS và bind chúng vào cùng một cổng và địa chỉ IP, hoặc vào các địa chỉ IP khác nhau.
Binding Website IIS
Một máy chủ web IIS đơn lẻ chạy trên Windows Server có thể lưu trữ nhiều website. Tuy nhiên, để IIS phân phối các yêu cầu HTTP đúng cách, mỗi website phải được xác định bằng một giá trị duy nhất. Trong trường hợp website IIS, nó bao gồm ba thuộc tính tạo nên một tổ hợp duy nhất cho mỗi website. Đó là:
- một số cổng TCP
- một địa chỉ IP
- một host header (tên máy chủ)
Thông tin về các website được lưu trữ trong thuộc tính ServerBindings của metabase IIS theo định dạng sau: IP:Port:Hostname. Do đó, nếu bạn muốn lưu trữ nhiều website trên cùng một cổng và địa chỉ IP, bạn sẽ phải sử dụng Host header duy nhất. Host header là gì? Host header là một phần của yêu cầu HTTP đến máy chủ được gửi bởi client chỉ định website nào được gửi đến. Theo đó, host header này phải được chỉ định phía máy chủ web, và DNS phải chứa bản ghi đúng khớp hostname và địa chỉ IP của máy chủ web IIS.
Giả sử bạn có một website chạy trên IIS và lắng nghe cổng 80. Và bạn cần bind website thứ hai vào cùng cổng đó.
Trong IIS Manager, tạo website khác (Add Website) với tên TestSite, file của nó sẽ nằm trong c:\inetpub\TestSite (chưa chỉ định hostname).
Sau khi bạn nhấn OK, một cảnh báo xuất hiện rằng bạn không thể sử dụng binding *:80 cho cả hai site.
Add Website The binding '*:80:' is assigned to another site. If you assign the same binding to this site, you will only be able to start one of the sites. Are you sure that you want to add this duplicate binding?
Đồng ý với cảnh báo này. Vậy bạn đã có thêm một site bind vào cổng 80, bạn không thể khởi động nó mà không dừng site đầu tiên.
Lưu Trữ Nhiều Website Trên IIS Sử Dụng Host Headers
Để tạo một binding duy nhất, hãy chỉ định một tên khác (Host Name) cho website IIS thứ hai. Chuột phải TestSite và chọn Edit Bindings. Chọn binding bạn cần và nhấn Edit.
Chỉ định tên máy chủ duy nhất mà người dùng sẽ truy cập, như TestSite, trong trường Host Name.
Bạn có thể cấu hình binding site IIS bằng dấu nhắc lệnh. Trong trường hợp này, đối với IIS 7 hoặc mới hơn, lệnh cấu hình binding trông như sau:
C:\Windows\System32\inetsrv\appcmd.exe set site /site.name:testsite /+bindings.[protocol='http',bindingInformation='*:80:testsite']
Bây giờ bạn có thể khởi động website thứ hai cũng.
Tất cả những gì bạn phải làm là thêm một bản ghi DNS alias cho máy chủ (A hoặc CNAME) trỏ đến địa chỉ IP hoặc hostname của máy chủ web IIS của bạn. Nếu bạn đang sử dụng miền Active Directory, bạn cần tạo bản ghi DNS trên bộ điều khiển miền.
Bạn có thể tạo bản ghi CNAME cho tên testsite trong console DNS (dnsmgmt.msc) và chỉ định tên miền đầy đủ (FQDN) của máy chủ IIS làm target host.
Bản ghi DNS này cũng có thể được tạo bằng PowerShell:
Add-DnsServerResourceRecordCName -HostNameAlias web-srv1.woshub.com -Name testsite -ZoneName woshub.com
Thử mở https://TestSite trong trình duyệt của bạn. Nó nên mở thành công.
Dưới đây là một số ghi chú hữu ích đáng đề cập.
Nếu bạn đang sử dụng máy chủ IIS độc lập, việc ánh xạ tên site đến địa chỉ IP của máy chủ được thực hiện qua file C:\Windows\system32\drivers\etc\hosts
Cài đặt bind được lưu trong phần <sites> của file cấu hình IIS C:\Windows\System32\inetsrv\config\applicationHost.config.
Trong trường hợp của chúng ta, phần này chứa dữ liệu sau:
<sites> <site name="Default Web Site" id="1"> <application path="/"> <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:" /> </bindings> </site> <site name="TestSite" id="2" serverAutoStart="true"> <application path="/" applicationPool="TestSite"> <virtualDirectory path="/" physicalPath="C:\inetpub\TestSite" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:TestSite" /> </bindings> </site> <siteDefaults> <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" /> <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites>
Tương tự, bạn có thể lưu trữ và chạy hàng trăm site trên cùng một cổng của máy chủ web IIS của bạn.
Chạy Nhiều Site Với Địa Chỉ IP Khác Nhau Trên IIS
Bây giờ hãy thử chạy hai site trên máy chủ web IIS ở các địa chỉ IP khác nhau. Trước hết, bạn cần thêm một giao diện VLAN riêng biệt trên Windows Server hoặc đơn giản là gán một địa chỉ IP bổ sung (alias) cho card mạng của bạn.
Trong ví dụ này, máy chủ có địa chỉ IP chính 192.168.13.100, và tôi sẽ thêm một alias IP bổ sung 192.168.13.101 vào cùng card mạng:
Get-NetIPAddress | ft IPAddress, InterfaceAlias, SkipAsSource
New-NetIPAddress –IPAddress 192.168.13.101 –PrefixLength 24 –InterfaceAlias “Ethernet” –SkipAsSource $True
Bây giờ bạn cần tạo bản ghi A cho site mới trên máy chủ DNS (chúng ta sẽ thêm bản ghi PTR trong zone ngược với tùy chọn –CreatePtr):
Add-DnsServerResourceRecordA -Name NewSite3 -IPv4Address 192.168.13.101 -ZoneName woshub.com -TimeToLive 01:00:00 –CreatePtr
Còn lại là mở cài đặt Site Binding và bind site vào địa chỉ IP bổ sung của máy chủ của bạn.
Quản Lý Binding Site IIS Sử Dụng PowerShell
Bạn có thể quản lý binding của các site trên máy chủ IIS bằng PowerShell. Để làm điều đó, module WebAdministration được sử dụng:
Import-Module WebAdministration
Hiển thị thông tin về tất cả các site IIS có sẵn và binding của chúng:
Get-IISSite
Hoặc về một site đơn lẻ:
(Get-Website -Name NewSite).bindings.Collection
protocol bindingInformation sslFlags -------- ------------------ -------- http 192.168.13.101:80:NewSite3 0
Để thay đổi binding của site này (bạn có thể thay đổi địa chỉ IP, cổng hoặc tên):
Set-WebBinding -Name NewSite1 -BindingInformation "192.168.13.101:80:NewSite1" -PropertyName 'Port' -Value '8080'
Set-WebBinding -Name NewSite1 -BindingInformation "192.168.13.101:8080:NewSite1" -PropertyName 'IPAddress' -Value '192.168.13.100'
Để thêm binding mới cho site IIS cụ thể, chạy:
New-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:" -Protocol http
Để xóa binding:
Remove-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:"
Vậy, bạn có thể chạy một vài site trên máy chủ web IIS cả trên các địa chỉ IP khác nhau và trên cùng một địa chỉ IP và số cổng TCP.