質問: さくらVPSを借りていろいろ遊んでおりまして、そのなかでnode.js(Express)を使って動いているアプリケーションに関してアドバイスをいただければと思っています。 * 「hoge.com」(仮)というドメインを取得しています。 * これまでhttp://hoge.comにアクセスすると、普通にwebページ(A)を開いていました。(var/www/html配下に置いたページです) * 今回、それとは別にnode.js(Express)でアプリケーション(B)を作り、app.listen(11111);しました。 * iptableでport11111を開放したところ、http://hoge.comにアクセスするとアプリケーションBが開き、これまでのwebページAが見れなくなってしまいました(なぜかはわかりませんが、http://hoge.com:80にすると開く時もありました)。 できればサブドメイン「fuga」を使って * http://hoge.com → webページAを開く * http://fuga.hoge.com → アプリケーションBを開く のようにしたいのですが、何をどのように設定したら良いのでしょうか。 ためしに`/etc/httpd/conf/httpd.conf`に以下のように書いてみたのですが、どうやら違うようです。 ``` ServerName fuga.hoge.com ProxyPass / http://localhost:11111/ ProxyPassReverse / http://localhost:11111/ ``` ご存じの方いらっしゃったらお知恵いただけますとうれしいです。
回答: apache server のバージョンを 2.4 と想定して解答します。 操作としては、 apacheの設定ファイル `httpd.conf` 内の `mod_proxy` と `mod_proxy_http.so`を有効化、 すなわちそれぞれの `LoadModule` のコメントアウトされている部分を ``` #LoadModule proxy_module libexec/apache2/mod_proxy.so #LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so ``` これらの頭の `#` を取って、 ``` LoadModule proxy_module libexec/apache2/mod_proxy.so LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so ``` ファイルの最後に以下を追加することで期待されている挙動になるかと思います。 ``` # Website A DocumentRoot /var/www/html ServerName hoge.com # その他必要な設定を足す Require all granted # Website B ProxyRequests Off ProxyPass / http://localhost:11111/ ProxyPassReverse / http://localhost:11111/ ServerName fuga.hoge.com Require all granted ``` `VirtualHost` の設定については、一方のサイトだけでなく WebサイトA・Bどちらともに `VirtualHost` の設定を書くことで `hoge.com` へのアクセスと `fuga.hoge.com` へのアクセスそれぞれの設定を書き分けることができます。 また、今回は `node.js` のアプリケーションへアクセスを通す必要があるため、、 Website B 用の `VirtualHost` 設定ではプロキシを使用しています。 それを実現するためのプロキシ機能が Apache Server のデフォルトでは 無効となっておりますので、(今回はhttpアクセスをプロキシするので) `mod_proxy`と`mod_proxy_http`の 有効化をする必要があります。 今回の一連の内容については公式のバーチャルホストの例あたりが参考になるかと思います。