アーキテクチャをスマートに。

株式会社ネオジニア代表。ITアーキテクトとしてのお仕事や考えていることなどをたまに綴っています。(記事の内容は個人の見解に基づくものであり、所属組織を代表するものではありません)

IIS Express で localhost 以外からアクセスする方法

Visual Studio 2012 で ASP.NET MVC 開発したとき、デバッグのためにリモートホストからアクセスする必要があったので、やり方を調べました。
検索用キーワード:IIS Express 外部からアクセス リモートアクセス 外部公開 他のPCからアクセス

背景

Visual Studio 2012 で ASP.NET MVC 開発したとき、デフォルトで IIS Express でホスティングしてくれるのですが、URLが http://localhost:xxxxx/ となっていて、IPアドレスでのアクセスをしようとすると蹴られてしまいます。
これを解決するための手順です。

試した環境

やることは以下の3つ。

  1. IIS Express の設定変更
  2. URL ACL の設定
  3. ファイアウォールを開ける

以下は、IPアドレスが 192.168.1.202 でポート番号が 53280 の場合で説明していきます。自分の環境に合わせて適宜読み替えて下さい。

IIS Express の設定変更

まず、http://192.168.1.202:53280/ というような IPアドレスやホスト名でアクセス出来るように設定を変更する必要があります。
設定ファイルは、マイドキュメントに入ってます。パスで言うと以下です。このファイルをテキストエディタ(とかメモ帳)で開きます。

C:\Users\ユーザ名\Documents\IISExpress\config\applicationhost.config

Visual Studio で一度でも実行していれば、ホスティング設定が自動的に追記されています。
"<sites" で検索するなどして、プロジェクト名やポート番号を見ながら該当の <site>ノードを探します。
こんな感じの記述箇所です。

	<site name="HelloWorld1" id="9">
		<application path="/" applicationPool="Clr4IntegratedAppPool">
			<virtualDirectory path="/" physicalPath="C:\Users\ユーザ名\Documents\Visual Studio 2012\Projects\HelloWorld1\HelloWorld1" />
		</application>
		<bindings>
		  <binding protocol="http" bindingInformation="*:53280:localhost" />
		</bindings>
	</site>

見つかったら、 ノードに binding を追記します。既にある行をコピーして、localhost の部分をIPアドレスかホスト名に変えればOKです。ポート番号は変えなくてもいけます。

	<site name="HelloWorld1" id="9">
		<application path="/" applicationPool="Clr4IntegratedAppPool">
			<virtualDirectory path="/" physicalPath="C:\Users\ユーザ名\Documents\Visual Studio 2012\Projects\HelloWorld1\HelloWorld1" />
		</application>
		<bindings>
			<binding protocol="http" bindingInformation="*:53280:localhost" />
			<binding protocol="http" bindingInformation="*:53280:192.168.1.202" />
		</bindings>
	</site>

URL ACL の設定

次に、URL ACL の設定をします。*1

管理者権限でコマンドプロンプトを開き、以下のコマンドを実行して下さい。

netsh http add urlacl url=http://IPアドレスorホスト名:ポート番号/ user=everyone

なお、XPの場合は、次のようにするそうです。(試してません。注釈の引用元参照のこと)

httpcfg set urlacl /u http://IPアドレスorホスト名:ポート番号/ /a D:(A;;GX;;;WD)

こんな感じです。

ここまでで、ローカルホスト内から http://192.168.1.201:53280/ としてアクセス出来るようになります。
Visual Studioデバッグ実行し、ブラウザのURLを手で打ち変えて試してみればわかります。
エラーの場合

  • 400 Bad Request が返ってくる場合は、URL ACL の設定が正しく出来てないと思います。
  • 503 Service Unavailable が返ってくる場合は、IIS Express の設定が反映されてない可能性があります。設定ファイルを保存したか確認し、IIS Express を再起動してみて下さい。(通知領域のIIS Expressのアイコンを右クリックして終了できます)

ファイアウォールを開ける

リモート(要するにIPの異なる別の端末)からアクセスしたい場合は、さらにファイアウォールを開ける必要があります。
僕はいつも設定が面倒なので、とりあえずファイアウォールを無効にして実験します。上手く行くことがわかったら、次はちゃんとセキュリティを考慮して必要なポート番号だけを通すようにします。

ファイアウォールの設定方法はググったらいっぱい出てくるので省略。(手抜きすんません)