:8080とはもうおさらば!Vagrantを使ってポートを含めないURLで開発する

こんにちは、河森です。
Vagrantを使ってウェブ開発をしていますか?
最近はバージョン1.5が出たり、
Vagrant Cloudが出たりと何かと話題に上がっています。
今日はVagrantをウェブ標準のポートで使用してみようと思います。

ポートフォワーディング

Vagrantでの開発は環境を強く意識しなくても良いのでとても楽ですが、
*nixベースのホストだった場合、
ウェブ開発ではポートフォワーディングの利用を強いられることになります。
ゲスト側は80番で待ち受けていても、
http://localhost:8080/ にアクセスして使う、みたいなですね!

こうするのは、一般ユーザーでは1024番以下のポートにバインドすることができないためです。
$ vagrant init
を実行すると生成されるVagrantfileに
config.vm.network :forwarded_port, guest: 80, host: 8080
とポートフォワーディングのサンプルが記載されているのはこのためです。

ポートを指定せずにアクセスしたい

ウェブ開発するときURLにポートが含まれるのは困るときがあると思います。
productionで動かすとSSLだから強制的にhttpsに転送されてしまってテストに支障が出たり。
そんなときは以下のコマンドでパケットフィルタの選り分けを行います。

httpなら
$ sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to me 80
httpsなら
$ sudo ipfw add 101 fwd 127.0.0.1,8443 tcp from any to me 443

127.0.0.1:80に対するアクセスを127.0.0.1:8080に分けています。
Vagrantfileの設定は8080のアクセスを80にポートフォワーディングしています。

httpなら
config.vm.network :forwarded_port, guest: 80, host: 8080
httpsなら
config.vm.network :forwarded_port, guest: 443, host: 8443

最後に

ホストマシンの80ポートで待ち受けられている場合はそちらが優先されます。
これで無事、https?://localhost/で開発出来るようになりました!