WebMatrix (IIS Express)で公開サーバー

WebMatrix を公開サーバーとして利用できるかどうか検討してみました。WebMatrix の方が名前が知られているので WebMatrix と書きましたが、実際に Web サーバーとして機能しているのは IIS Express の方なので、以下では IIS Express ということでメモします。

IIS Express は、開発用の Web サーバーであり、設定も簡単で手軽に利用することができます。IIS の方は公開用の Web サーバーなので、サービスとして動作し、セキュリティを考慮して権限の低いユーザーで実行しています。一方、IIS Express は、ユーザーが起動することにより起動したユーザーの権限で動作するので、開発時にはアクセス権限のことを気にせずに使用できて便利なのですが、公開用としては適していません。

しかし、Windows XP や Vista Home Basic のパソコンが余っているというケースは多いので、公開サーバーとして利用できるか調べて見ました。結果は、サーバーとして本格的に使用するのは無理であっても、小規模なイントラネットでの使用には問題がないし、インターネットでもテスト用等には利用できることがわかりました。古いパソコンを有効活用することができると思います。

以下に、IIS Express を公開する場合の設定をメモしてみました。なお、Windows XP Profesional の場合、IIS 5.1 が付属していますが、バージョンが古く制限が多いので、IIS Express を利用した方がいい場合が多いと考えられます。

1. リモートの PC から接続できるように設定

IIS Express は、初期設定では、URLが localhost になっているので、他の PC からアクセスすることができません。IIS Express は、URL が localhost でポート番号が1024を超えるものに設定した場合のみ、管理者権限がなくても起動させることができます。それ以外の場合には、もし管理者権限がなければ、「次のサイトは停止しました」というメッセージが出て起動しません。

注意! 管理者権限で動作させていて攻撃を受けた場合には、容易に管理者権限を奪われてしまうことになります。公開する場合は、必ず標準ユーザー(XPの場合は制限ユーザー)で起動するようにしてください。

1-1. 管理者権限なしで外部から接続できるようにする

まず、URL が localhost 以外でも、管理者権限なしでも起動するように設定します。IIS Express は、IIS と同じく HTTP の処理に HTTP.SYS を利用しているので、HTTP.SYS は既定の設定では標準ユーザーが起動したアプリケーションからのアクセスを許可しませんが、HTTP.SYS を設定してやることにより、標準ユーザーが起動したアプリケーションからのアクセスが可能になります。設定は、以下のとおりで、URL を 192.168.1.11 、ポート番号を8080に設定する場合の例で説明していますので、設定したい URL とポート番号に変更してください。HTTP の標準ポート番号である 80 に設定することも問題なく可能です。

Windows 7/Vista の場合

コマンド プロンプトを「管理者として実行」して、以下のコマンドを実行します。

netsh http add urlacl url=http://192.168.1.11:8080/ user=everyone

Windows XP の場合

まず、Microsoft のダウンロードセンターから Windows XP Service Pack 2 Support Tools をダウンロードしてインストールします。注意点は、日本語版はないので英語版をダウンロードし、Installation Type の選択では、「Typical」ではなく、「Complete」を選択するようにします。
次に、管理者で、コマンド プロンプトを立ち上げて、以下のコマンドを実行します。なお、/a 以下の記述は、Security Descriptor Definition Language (SDDL) というものだそうです。

httpcfg set urlacl /u http://192.168.1.11:8080/ /a D:(A;;GX;;;WD)

設定した内容を削除する場合は、以下のコマンドを実行します。不要になったら削除しておきましょう。

Windows 7/Vista の場合

netsh http delete urlacl url=http://192.168.1.11:8080/

Windows XP の場合

httpcfg delete urlacl /u http://192.168.1.11:8080/

1-2. サイトにドメイン又はIPアドレスをバインドする

WebMatrix で、「サイト」の「設定」を選択すると以下の図のような画面になるので、http://以下に、ドメイン名又はIPアドレスとポート番号を入力してやりま す。例えば、IPアドレスが、192.168.1.11 で、ポート番号を8080に設定する場合は、192.168.1.11:8080 と入力します。それだけで、ドメイン名とポート番号の設定ができてしまいます。Web サイトを選択するとドメイン名とポート番号が変更されているはずです。

webmatrix01

1-3. ファイアーウォールの開放

Windows XP SP2 以降の Windows では、ファイアウォールがデフォルトでは有効に設定されています。したがって、他のパソコンからアクセスできるようにするためには、ファイアウォールで設定したポート番号のTCPの受信を許可する必要があります。

Windows XP の場合は、「スタート」->「コントロールパネル」->「ネットワークとインターネット接続」->「Windows ファイアウォール」の順でクリックして「Windows ファイアウォール」を起動します。次に「例外」タブをクリックして、「ポートの追加」ボタンをクリックします。以下の図のようなログが表示されます。名前の欄には適当にわかりやすい名前をつけて、ポート番号の欄には、1-1. の WebMatrix で設定したポート番号を入力して、「OK」ボタンをクリックします。
webmatrix02

Windows 7/Vista の場合は、こちらを参考にして、「セキュリティが強化された Windows ファイアウォール」でWebMatrix で設定した IIS Express のポート番号の受信の規則を作成して接続を許可するようにしてください。

2. PC の起動時に自動的に IIS Express を立ち上げる設定

公開用サーバーの場合は、起動のたびにWebMatrix を手動で起動させるのは不便です。IIS Express は、コマンドラインから iisexpress /site:SiteName で起動できるので、タスクスケジューラーに登録して起動時に自動で起動させることができます。IIS Express のインストールフォルダーが既定で、サイト名が WebSite1 の場合は、以下のようなコマンドで起動させることができます。(詳しくは earn.iis.net の 「 Running IIS Express from the Command Line」を参照)

32ビットの場合 "C:\Program Files\IIS Express\iisexpress" /site:WebSite1
64ビットの場合 "C:\Program Files (x86)\IIS Express\iisexpress" /site:WebSite1

タスクスケジューラへの登録は、Windows 7/Vista の場合は、「タスクスケジューラ」を、Windows XP では、「タスク」を起動して、タスクの開始(実行)については「コンピュータの起動時」に、プログラムの設定については以下の図を参考にして設定してください。なお、実行時に使用するユーザーについては、必ず標準ユーザーを使用するようにし、「ユーザーがログオンしているかどうかにかかわらず実行する」設定にしておきます。

Window 7/Vista
webmatrix03

Windows XP
webmatrix04