PowとApacheをIPv4でも共存させる方法


Mac OS X環境で、PowというRailsサーバーを使うと、
LaunchDaemonを使用して自動起動してくれ、http://プロジェクト名.dev/ で簡単にRailsアプリにアクセスできます。

ただ、初期状態だと、TCPの80番ポートを全てPowが取ってしまい、Apacheなどで80番ポートを利用できなくなります。
無効化する方法がどこにも書かれていなかったのですが、以下のコマンドで無効化できます。

sudo launchctl unload /Library/LaunchDaemons/cx.pow.firewall.plist

(11/10/31 追記)
これだけでは無効にならない場合
sudo rm /Library/LaunchDaemons/cx.pow.firewall.plist
を実行し、cx.pow.firewallを削除したうえでMacを再起動してください。

Powは実際には20559番ポートで動作しています。
「cx.pow.firewall」というデーモンが、ipfwを使用して、
80番ポートに飛んできたリクエストを20559番ポートに飛ばしているので、これを切れば80番ポートは占有されなくなります。

ただ、この設定を行うと、当然80番ポートからPowにはアクセスできなくなるため、
「http://プロジェクト名.dev/」ではアクセスできず、「http://プロジェクト名.dev:20559/」と入力する必要が出てきます。

これだと不便なので、ApacheのRewriteEngineを使用して飛ばすように設定します。

1. /private/etc/apache2/httpd.conf の以下の行のコメントアウトを外す

# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf

2. /private/etc/apache2/extra/httpd-vhosts.conf に以下の設定を追加

<VirtualHost *:80>
ServerName dev
ServerAlias dev *.dev
RewriteEngine On
RewriteRule (.*) http://%{HTTP_HOST}:20559$1
</VirtualHost>

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ