同じポート・IPアドレスで複数のIIS Webサイトを運用する方法
Windowsにインターネット インフォメーション サービス(IIS)をインストールすると、デフォルトで空の「Default Web Site」が作成され、標準的なWeb HTTPポートであるTCP 80で待ち受けを行います。IISの用語で言うと、このサイトはTCP/80ポートにバインドされている状態です。このサイトを開くには、ブラウザーにIISサーバー名(https://web-srv1 など)またはIPアドレス(https://192.168.1.100 など)を入力するだけです。
実は1台のIIS Webサーバーは数十から数百ものWebサイトを提供でき、同じTCPポート(80や443など)で待ち受け・応答する複数のWebサイトを同時に実行することも可能です。しかし、IISマネージャーの画面だけでは、別のポート(例:8080)にバインドしなくても追加のWebサイトをホストできることが分かりにくくなっています。
本記事では、同じIISサーバー上で複数のWebサイトをホストし、同じポートとIPアドレス、または異なるIPアドレスにバインドする方法を詳しく解説します。

目次
- IIS Webサイトのバインドとは
- ホストヘッダーを使ってIISで複数サイトをホストする
- 異なるIPアドレスで複数のサイトを運用する
- PowerShellによるIISサイトバインドの管理
IIS Webサイトのバインドとは
Windows Server上で稼働する1台のIIS Webサーバーは、複数のWebサイトをホストできます。ただし、IISがHTTPリクエストを正しく振り分けるためには、各Webサイトを何らかの一意な値で識別する必要があります。IISのWebサイトでは、次の3つの属性の組み合わせが各サイトごとに一意になるように構成します。
- TCPポート番号
- IPアドレス
- ホストヘッダー(ホスト名)
ホストされているサイトの情報は、IISメタベースのServerBindings属性に IP:ポート:ホスト名 という形式で保存されます。したがって、同じポートとIPアドレスで複数のサイトをホストしたい場合は、一意なホストヘッダーを使用する必要があります。
ホストヘッダーとは、クライアントがサーバーへ送信するHTTPリクエストに含まれる情報で、リクエストがどのWebサイト宛てなのかを示すものです。そのため、Webサーバー側でホストヘッダーを設定するとともに、DNS側にもホスト名とIISサーバーのIPアドレスを対応付けるレコードが必要になります。
ここでは、80ポートで待ち受けしているWebサイトがすでにIIS上で動いており、同じポートに2つ目のサイトをバインドする必要があるケースを想定して説明します。
まず、IISマネージャーで新しいWebサイト(Add Website)を「TestSite」という名前で作成します。コンテンツの配置先は c:\inetpub\TestSite とします(この時点ではまだホスト名は指定しません)。

OKをクリックすると、両方のサイトに *:80 というバインドは使用できない旨の警告が表示されます。
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?

警告に対しては「はい」を選択します。これでポート80にバインドされた2つ目のサイトが作成されましたが、現状では最初のサイトを停止しない限り起動できません。

ホストヘッダーを使ってIISで複数サイトをホストする
一意なバインドを作成するには、2つ目のIISサイトに別の名前(ホスト名)を指定します。TestSiteを右クリックしてEdit Bindings(バインドの編集)を選択し、対象のバインドを選んでEditをクリックします。
Host Name(ホスト名)フィールドに、ユーザーがアクセスする際に使用する一意のホスト名(例:TestSite)を指定します。

コマンドプロンプトからIISサイトのバインドを設定することもできます。IIS 7以降の場合、以下のようなコマンドを使用します。
C:\Windows\System32\inetsrv\appcmd.exe set site /site.name:testsite /+bindings.[protocol='http',bindingInformation='*:80:testsite']
これで2つ目のサイトも起動できるようになりました。

次に行うのは、IISサーバーのIPアドレスまたはホスト名を指すDNSエイリアス(AレコードまたはCNAMEレコード)の追加です。Active Directoryドメイン環境を使用している場合は、ドメインコントローラー上のDNSにレコードを作成します。
DNS管理コンソール(dnsmgmt.msc)で「testsite」という名前のCNAMEレコードを作成し、ターゲットホストのFQDNとしてIISサーバーのドメイン名を指定します。

このDNSレコードはPowerShellでも作成できます。
Add-DnsServerResourceRecordCName -HostNameAlias web-srv1.woshub.com -Name testsite -ZoneName woshub.com
ブラウザーで https://TestSite を開いてみましょう。正常に表示されるはずです。

補足事項
スタンドアロンのIISサーバーを使用している場合、サイト名とサーバーIPアドレスの対応付けは C:\Windows\system32\drivers\etc\hosts ファイルで行います。
バインド設定は、IIS構成ファイル C:\Windows\System32\inetsrv\config\applicationHost.config の <sites> セクションに保存されています。今回の例では、このセクションは以下のようになっています。
<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>
同様の手順で、同じポート上で数百規模のサイトを1台のIIS Webサーバーでホスト・運用することも可能です。
異なるIPアドレスで複数のサイトを運用する
続いて、IIS Webサーバー上で異なるIPアドレスを使って2つのサイトを運用する方法を見ていきましょう。まず、Windows Serverに個別のVLANインターフェイスを追加するか、NICに追加のIPアドレス(エイリアス)を割り当てる必要があります。
この例では、サーバーのプライマリIPアドレスは192.168.13.100で、同じネットワークアダプターに追加のIPエイリアス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サーバーに作成します(–CreatePtrオプションを付けると、逆引きゾーンにPTRレコードも同時に作成されます)。
Add-DnsServerResourceRecordA -Name NewSite3 -IPv4Address 192.168.13.101 -ZoneName woshub.com -TimeToLive 01:00:00 –CreatePtr
あとは、サイトのバインド設定を開き、そのサイトをホストの追加IPアドレスにバインドするだけで完了です。
PowerShellによるIISサイトバインドの管理
IISサーバー上のサイトバインドは、PowerShellを使って管理することもできます。ここではWebAdministrationモジュールを使用します。
Import-Module WebAdministration
利用可能なすべてのIISサイトとそのバインド情報を表示します。
Get-IISSite
特定のサイトのみ表示する場合はこちらです。
(Get-Website -Name NewSite).bindings.Collection
protocol bindingInformation sslFlags -------- ------------------ -------- http 192.168.13.101:80:NewSite3 0
サイトのバインドを変更する(IPアドレス、ポート、名前は変更可能):
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'
特定のIISサイトに新しいバインドを追加する:
New-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:" -Protocol http
バインドを削除する:
Remove-IISSiteBinding -Name NewSite1 -BindingInformation "*:9090:"
このように、IIS Webサーバーでは、異なるIPアドレスを使う方法でも、同じIPアドレスとTCPポート番号を共有する方法でも、複数のサイトを柔軟に運用できます。ホストヘッダーとDNSレコードを適切に組み合わせれば、1台のサーバーで効率的に多数のWebサイトをホストできます。
-
複数のGmailアカウントを同時に使用する3つの方法を徹底解説
学校や仕事の用途、あるいはメインのメールアドレスが少し恥ずかしいものであるといった理由で、ほとんどの人が人生のどこかのタイミングで複数のメールアカウントを持つことになります。追加のメールアカウントも、メインのアドレスと同じように確認・管理・活用していく必要があります。2つのアカウントが異なるメールサービスであれば特に問題はありませんが、両方ともGmailのように同じプロバイダーに登録されている場合はどうすればよいのでしょうか?他のメールサービスであれば、同時に使えるのは1つのアカウントだけと諦めるしかありません。しかし幸いなことに、Gmailには複数のアカウントを同時に利用する方法がいくつか用
-
Androidで同一人物の重複連絡先を一括削除する方法【手動・自動】
スマートフォンの普及により、連絡先を端末で管理し、数回タップするだけで発信できるようになり、とても便利になりました。しかし、Androidのフォーラムでは「同じ人物の連絡先が似た情報で何件も作成されてしまう」という問題がたびたび話題になっています。重複した連絡先はストレージ容量を大きく圧迫するわけではありませんが、電話帳の混乱や誤操作の原因になります。そこで本記事では、Androidで重複連絡先を削除する方法をわかりやすく解説します。 Androidで重複連絡先を削除する2つの方法 Androidで重複連絡先を削除するには、「手動」と「自動」の2つの方法があります。 方法1:手動で削除する 手