IIS(Internet Information Services)で複数のWebサイトをホストする際、通常はDNSを利用して各サイトにアクセスします。しかし、開発や検証のためにDNSを設定せず、異なるサイトにアクセスしたいケースもあるでしょう。たとえば、IPアドレスやポートを使う方法、hostsファイルを活用する方法などが考えられます。
本記事では、C#で構築したWebサイトをIISにホストし、DNSを設定せずに複数のサイトへアクセスする具体的な方法を紹介します。開発環境の構築に役立つテクニックを知りたい方は、ぜひ参考にしてください。
IISで複数のWebサイトを設定すると発生する問題
IISでは、1台のPCに複数のWebサイトをホストすることが可能ですが、初期設定のままではサイト間で競合が発生することがあります。これは、IISが各Webサイトを識別するために「IPアドレス」「ポート番号」「ホスト名(Host Header)」の組み合わせで識別しているためです。
✅ ポート競合の問題
IISでは、デフォルトでHTTPのポート「80」が使用されます。2つ以上のサイトが同じポートでバインドされていると、最初に起動したサイトだけが有効となり、他のサイトは起動できません。
✅ IPアドレスの共有問題
ローカル環境では、すべてのサイトが同じIPアドレス(例:127.0.0.1)を使用するため、ポートやホスト名を変えない限り、どのサイトへアクセスするか判断できなくなります。
✅ ホスト名の指定が必要になる
複数サイトを同一ポート・IPでホストする場合、各サイトにユニークなホスト名を割り当てる必要があります。これが設定されていないと、最初に一致したサイトが常に表示されてしまいます。
こうした問題を回避するには、ポート番号やIP、ホスト名の組み合わせを工夫する必要があります。
DNSなしでアクセスする方法①:異なるポート番号を設定する
IISで複数のWebサイトをホストする際、最もシンプルかつ確実に競合を回避する方法が「異なるポート番号を割り当てる」ことです。この方法では、同じIPアドレス(例:127.0.0.1)を使用しつつ、各サイトを別々のポートで区別するため、DNS設定やホスト名の指定が不要です。
✅ 設定手順の例
- IISマネージャーを開きます。
- 対象のWebサイトを選択し、右側の「バインドの編集」をクリックします。
- 「追加」または「編集」を選び、ポート番号を例として「8080」「8081」などに設定します。
- サイトを再起動し、ブラウザで
http://localhost:8080
のようにアクセスします。
✅ ASP.NET Coreの例
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("<http://localhost:8080>");
var app = builder.Build();
app.MapGet("/", () => "Hello, World!");
app.Run();
✅ ポイント
- 異なるポートであれば、同一IPでも複数サイトの同時起動が可能。
- 設定の反映が即時で、テスト環境での切り替えもスムーズです。
ただし、ポート番号を都度覚える必要があるため、複数人での開発時には管理表などを用意するとよいでしょう。特に社内ネットワークでは使用できないポートが存在する場合もあるため、注意が必要です。
DNSなしでアクセスする方法②:ローカルIPアドレスを利用する
ローカルIPアドレスを活用することで、同一ネットワーク内の他の端末からもアクセスできる環境を構築できます。特に、複数人での動作確認やモバイル端末からの表示チェックを行いたい場合に便利です。IISでは各サイトに対して異なるIPアドレスを割り当てることで、ポート競合を避けながら複数サイトを同時にホストできます。
✅ 設定手順の例
- コマンドプロンプトで
ipconfig
を実行し、ローカルのIPアドレスを確認します(例:192.168.1.10)。 - IISマネージャーを起動し、対象のWebサイトを選択して「バインドの編集」を開きます。
- 「追加」または「編集」をクリックし、特定のIPアドレス(上記の例など)を指定します。
- サイトを再起動し、ブラウザで
http://192.168.1.10
のようにアクセスします。
✅ ASP.NET Coreの例
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("<http://192.168.1.10:80>");
var app = builder.Build();
app.MapGet("/", () => "Hello from local IP!");
app.Run();
✅ ポイント
- 同一ネットワーク内の他デバイスからアクセス可能。
- ポートを80のまま使えるため、URLがシンプル。
ただし、DHCP環境ではIPアドレスが再起動などで変わることがあります。開発マシンに固定IPを設定するか、必要に応じて再確認しましょう。また、ファイアウォール設定によりアクセスがブロックされる場合もあるので、その点にも注意が必要です。
DNSなしでアクセスする方法③:hostsファイルを編集する
hosts
ファイルを編集して独自のホスト名を割り当てる方法は、DNSサーバーを用意しなくても、本番環境に近いURL構成を再現できる手法です。URLを自由に設定できるため、プロジェクトごとの仮想ドメインを作るような感覚で開発できます。
✅ 設定手順の例
- メモ帳を「管理者として実行」し、
C:\\Windows\\System32\\drivers\\etc\\hosts
を開きます。 - 以下のようなエントリを追加します(ドメイン名は任意):
127.0.0.1 site1.local 127.0.0.1 site2.local
- IISマネージャーで対象サイトの「バインドの編集」を開き、ホスト名として
site1.local
やsite2.local
を設定します。 - サイトを再起動し、ブラウザで
http://site1.local
のようにアクセスします。
✅ ASP.NET Coreの例
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("<http://site1.local:80>");
var app = builder.Build();
app.MapGet("/", () => "Hello from site1.local!");
app.Run();
✅ ポイント
- 本番環境に近いドメイン構成でテストできる。
- 複数サイトの切り替えがURLレベルで行えるため管理が楽。
注意点としては、hosts
ファイルの編集には管理者権限が必要であり、ミスがあると正しく名前解決されません。また、ファイル保存後も反映にタイムラグが生じる場合があるため、ブラウザのキャッシュクリアやPCの再起動で解決することがあります。特にチーム開発では、各メンバーのPCにも同様の設定が必要になる点も考慮して運用しましょう。
まとめ
IISで複数のWebサイトをホストする際、DNSを使用しなくても複数のサイトにアクセスする方法は十分に存在します。それぞれの方法にはメリット・デメリットがありますが、開発や検証といった用途においては、要件や運用のしやすさに応じて最適な選択をすることが重要です。
✅ ポイントごとの振り返り
- ポート番号を変更する方法は、最も手軽で即時に使える点が魅力。ただし、ポート番号を記憶しておく必要があり、ネットワーク制限が影響することもあります。
- ローカルIPアドレスを使う方法は、ネットワーク内の他の端末と共有しやすく、実機確認にも便利ですが、DHCP環境ではIPの固定が必要です。
- hostsファイルを編集する方法は、URLベースでの管理がしやすく、本番に近い形でテストできる反面、ファイル編集や環境統一の手間がかかります。
いずれの方法も、IISの「バインド設定」を適切に活用することで実現可能です。開発初期段階ではポート分けで運用し、後にhosts
を使ってドメインベースに移行するなど、段階的な活用もおすすめです。自分やチームの作業スタイルに合わせて、最適な構成を選んでください。
方法 | メリット | デメリット | 推奨シーン |
---|---|---|---|
ポート番号を変える | 設定が簡単/即時反映/DNS不要 | ポート番号を覚える必要あり/一部ポートは制限される可能性あり | 開発初期の素早い検証や個人開発環境 |
ローカルIPアドレスを使う | 他端末からもアクセス可/URLがシンプル | IPが変わる可能性あり(DHCP)/ファイアウォールの設定が必要 | チームでの確認や複数端末からの動作検証 |
hostsファイルを編集する | 覚えやすいURL/本番に近い形でテスト可 | 管理者権限が必要/チーム全体に設定が必要 | 本番を意識した開発環境やURLベースの切り替え運用 |
コメント