Tips

OSX Server 5.1.5 との共存

日付2016/07/06
ID16-003
バージョン全て
プラットフォームMac

Macにおいて、各種のインターネットサービスを行うために、OSX Serverアプリケーション(以下Serverアプリ)をインストールして利用することがあると思います。同時に4DのWebサーバーを利用することもあることでしょう。Serverアプリの5.1.4以前のバージョンは、他の同様のインターネットサービスとの共存が比較的容易でしたが、現時点での最新版である Server 5.1.5 は、少々厄介です。

Server 5.1.5 になってからは、Serverアプリ以外の4Dを含むアプリケーションは、80ポートを開くことができません。理由は、たとえServerアプリのWebサーバーを有効にしていなくても、httpdデーモンが動作して、80ポートを確保しているからです。そのため、例えば4DではWebサーバーで80ポートを利用しようとすると、ポートを開くことができずにエラーになります。

これを回避するためにServerアプリのコンフィギュレーションを書き換えて、httpdを完全に封印することも可能ですが、イバラの道を歩みそうなので、別の方法をご紹介します。その方法とは・・・

ServerアプリのWebサーバーを利用する

せっかくServerアプリをインストールしたのですから、そのWebサーバーを利用しない方法は無いと思います。Serverアプリに付属しているWebサーバーは、Webサーバーとしては最もメジャーなApacheです。Apacheの機能にリバースプロキシが搭載されているので、それを利用して4DのWebサーバーにリクエストをプロキシさせることは簡単です。

まずおおまかな手順は次のようになります

  1. Serverアプリでサイトの設定を確認する
  2. プロキシ設定を記述したファイルを用意する
  3. Serverアプリの設定ファイルに作成したプロキシ設定を記述したファイルをインクルードするよう1行追加する
  4. ServerアプリのWebサーバーを有効にする

関連情報:
ServerがインストールされたMacで4DのHTTPサーバーを起動する

Serverアプリでサイトの設定を確認する

設定状況

上の図は、ServerアプリのWebサーバーの設定画面です。この状態では、デフォルトのサーバーだけが存在します。このうち利用するサーバーは、80番のポートで開かれたサーバーになります。このサーバーのconfファイルを確認しますが、ServerアプリのWebサーバーの全てのconfファイルは、次のパスにあるフォルダ内にあります。

/Library/Server/Web/Config/apache2/sites/

このフォルダ内にはいくつかのconfファイルがありますが、80番ポートのconfファイルは「80_.conf」で終わるファイル名になります。この例ではデフォルトのconfファイルは「0000_127.0.0.1_34580_.conf」ですが、設定状況や環境では違う可能性がありますので、ご注意ください。

カスタム設定用のフォルダを準備する

次にこのフォルダの配下にカスタム設定用のフォルダを作成します。この例では「mySites」というフォルダを作成しました。フルパスは次のようになります。

/Library/Server/Web/Config/apache2/sites/mySites/

カスタム設定ファイルを作成する

このフォルダに直接ファイルを作ることはできませんので、デスクトップにテキストファイルを準備して、そのファイルに次の1行を記述します。

ProxyPass / http://127.0.0.1:8080

この記述のうち、最後の8080という数字は、4DのWebサーバーで公開するTCPポートの番号です。この例では、8080番ポートで公開するということになります。

ファイルを作成しましたら、先ほど用意した mySites フォルダにコピーします。この例では「test.com.conf」とファイル名に付けました。

Serverアプリの設定ファイルを編集する

最初に確認したconfファイルを編集しますが、直接編集することは許されていないので、デスクトップにコピーします。また、編集作業前には必ずバックアップしておきます。コピーしたファイルをテキストエディタ等で開きます。最後から2行目になるよう、Include定義を書き加えます。

書き換え前:

		・
		・
		・
	</Directory>
</VirtualHost>

書き換え後:

		・
		・
		・
	</Directory>
	Include /Library/Server/Web/Config/apache2/sites/mySites/test.com.conf
</VirtualHost>

このように最後にInclude定義をすることで、Serverアプリ側での編集を行っても、test.com.confファイルのInclude定義は消えることはありません。これで準備が整いましたので、ServerアプリでWebサーバーを再起動して、さらに4Dで8080ポートでWeb公開すれば、通常のhttpアクセスで4DのWebサーバーに接続できます。

4Dのポートを設定する

4Dのポートを設定しますが、設定する箇所は2箇所になります。この例題の場合は、次のように設定します。

データベース設定

上図の赤丸の部分が、設定を変更した部分です。SSLは無効になっていますが、SSLポート番号は4DがHTTPサーバ起動時にチェックしてしまうので、Serverアプリが予約している443番を避け、かつ1024番以上の使われていないポート番号をセットします。

もしもSSL通信が必要であれば、4Dで直接行わず、ServerアプリのApacheからプロキシされたリクエストを処理するようにします。その際には、SSLは全てApacheで処理するので、認証ファイル等もServerアプリに設定します。4D側へのプロキシされたリクエストはSSLではなく、Apacheにて復号された平文になりますが、パケットはマシン内で処理されるのでセキュリティ上の問題はありません。SSLにしろHTTPにしろ、4D側ではHTTPポートで全て処理することになります。

なお、プロキシされたリクエストの場合、通信元のIPを取り出すには、WEB GET HTTP HEADERコマンドを使って、プロキシ独特のヘッダ情報から取り出す必要があります。

さらに先を考える

この方法を一歩進めて、スタティックなオブジェクトをApacheだけで処理させて、ダイナミックなオブジェクトを4Dが処理するというように、4Dへの負荷を減らしたり、また攻撃から4Dを守ることもできるように設定することも可能です。非常に有効な方法ですので、もしServerアプリをインストールするならば、リバースプロキシを活用されますようお勧めします。