S.F. Page

Programming,Music,etc...

Webmatrix3でIIS ExpressもしくはApacheを80番ポートで動かす

WebMatrix3とIIS Express

WebMatriX3をインストールすると同時に(強制的に)IIS Expressもインストールされる。WebMatrixは開発用WebサーバーとしてIISExpressを既定で使用する。 このIIS ExpressというのはIISのサブセット的なもので、開発用としてローカルでWebサーバーを立てたいときに使うものである。サービスではなく、コマンドラインで動作する。つまり開発時だけちょこっと動かして、それ以外の場合は動かさないという使い方ができる。またIISのようなGUIの設定ツールはついてこない。基本的には設定ファイルを直接いじって構成する。設定はIISと同じことができるようである。ちなみにコマンドラインオプションは下記のとおり。

WebMatrixでは構成ファイルはある程度自動的に作成してくれるのでいちから作るとかそんなことはないが、仮想ディレクトリを追加するとかしたいときは手動で構成ファイルをいじる必要はある。

このIIS ExpressにはRewriteモジュールとFast CGIモジュールが既定で入っているので、パーマリンクを設定しているWordpressもきちんと動かすことができる。Wordpressのテーマをカスタマイズするとかの用途だけなら、これだけで十分である。でも情報量とか安心感ではapacheやnginxに軍配が上がるんだよねぇ。

WebMatrix3+IIS Expressで80番ポートを空ける

意外とできないのがこれ。Webmatrixではフォルダを指定するとそれに対応する設定ファイルを自動的に作成してくれ、さらにIIS Expressも自動的に立ち上げてくれる。その時の使用ポートはランダムに決定される。ポートはあとで変更出来るのだけれども、80番ポートを使用しようとするとIIS Expressがエラーで落ちてしまう。またXAMPPからapacheを80番ポートで起動しようとしても80番ポートが塞がっているというエラーが発生して立ち上がらない。いろいろ調べてみた結果、2つの設定を行うことで80番ポートを使用できる事がわかった。

1つ目:Web Deployのリモートサービスのポート変更を行う。

Webmatrixをインストールすると、Web Deploy 3.0(最新版は3.5)が同時にインストールされる。このツールはWebを配置したり、開発Webと本番Webを同期したりするのに使えるらしい。私の場合この機能は要らないのだがWebmatrixには必須のモジュールなので入れざるを得ない。しかしこのWeb Deploy 3.0がポート80を使って何かをなさる(何をしているのかいまいちわからないが)ので、ポート80は利用不可となってしまうのだ。これを回避するにはWeb Deployのサービスを止め、手動にすればいいのだが、なぜかWordpressをWebMatrixで導入するときにもWeb Deployを使っているらしく、サービスを止めているとエラーになってしまう。これはどうしたものかといろいろ調べてみるとここに書いてあるようにWeb配置ツールのリモートサービスの使用ポートはインストール時に変更できることがわかった。どうするかというとWeb Deployをいったんアンインストールして、マイクロソフトのサイトよりWeb Deploy 3.5のインストーラをダウンロードし、コマンドプロンプトで下記オプションで手動インストールする。

msiexec /i WebDeploy_amd64_ja-JP.msi /passive ADDLOCAL=ALL LISTENURL=http://+:8085/MsDeployAgentService/

上記ではポートを8085にしてインストールしている。Web Deployのポートを変えて大丈夫かな?と思ったので試しにWebMatrixでWordpressのインストールをしてみたら問題なかったので私の環境ではよしとする。これで80番ポートが空くので、apacheはポート変更せず動作させることができる。だが、IISExpressではこれだけでは80番ポートで動作させることはできない。次の追加設定が必要である。

2つ目:IisExpressAdminCmd.exeで使用するURLを登録する。

WebMatrixで使用するURLをIISExpressインストールディレクトリにあるIisExpressAdminCmd.exeで登録すると、WebMatrixから無事立ち上げることができる。私の環境では次のコマンドを入力した。

"C:\Program Files\IIS Express\iisexpressadmincmd.exe" setupFriendlyHostnameUrl -url:http://localhost:80/

このコマンドが何をしているのかというと、いろいろ調べた結果下記のことを行っているようである。あくまで推測だが。

  • hostsにホスト名を登録する。
  • netsh http add urlacl コマンドでURL予約エントリを登録する。

IISではそのURLを使用できるユーザーをACLで制限できるみたいで、それを制御するコマンドとしてnetsh http (add/delete/dump/flush/help/show) urlacl (パラメータ..)が用意されている。IisExpressAdminCmd.exeはそのコマンドを使って制限を緩める(Everyoneにする)みたいな気もする。だから登録というよりは削除→再登録しているのかもしれない。セキュリティ的にちょっと気になるけれども、私の場合別にそれでも何も問題はないので、一応このままにしている。

あとIisExpressにはAppCmd.exeというサイトや仮想ディレクトリを管理するコマンドもある。これを使うと構成ファイルを直接いじらなくてもある程度のことはできそうである。

そういうことでようやく80番ポートが使用できるようになったので、nginxをインストールしてVPSとほぼ同じ環境をローカルマシンで作っていくことにする。