Node.js
Apache
Socket.io
HTTP
proxy

apache proxy設定 + Node.js + socket.io を動かす

More than 1 year has passed since last update.

一部でDynamoDBを使いたかったので、AWS SDK for Node.jsを使用する必要がありました。
ドメインはメインのPHPのAPIと同じにしたかったので、proxyを設定して運用することにしました。
以下が今回設定した環境です。

※リバースプロキシを設定したいので、apache2.4以降のmod_proxy_wstunnel.soが必要です。

今回はhttp://example.com/socket.ioの、/socket.io以降アクセスした場合はnode、他は/var/www/html以下が読み込まれるようにしたいと思います。

expressを使うと楽なので、node_modulesにexpressをインストールします。

npm install express

例ではnode.jsは3000ポートを使用します。

app.js
var port = 3000,
    express = require('express'),
    app = express(),
    http = require('http').createServer(app),
〜
http.listen(port);

実行はバックグラウンドで動いてくれるforeverが便利なので、インストールします。

npm install forever -g
forever start app.js

nodeが実行されたら、apacheの設定をします。
デフォルトに無いので、モジュール読み込みのconfにmod_proxy_wstunnel.soを追加します。

/etc/httpd/conf.modules.d/00-proxy.conf
〜
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

プロキシ設定をします。

/etc/httpd/conf/httpd.conf
〜
ServerName example.com
DocumentRoot "/var/www/html"
〜
<IfModule mod_proxy.c>
    ProxyPass /socket.io http://127.0.0.1:3000/
    ProxyPassReverse /socket.io http://127.0.0.1:3000/
</IfModule>
〜

ブラウザにアクセスして以下が表示されれば成功です。

ブラウザ
Cannot GET /

おまけ:サーバー再起動した時用に以下の設定をrc.localに追加すると便利です。

/etc/rc.local
(cd /home/-/-/ && forever start app.js)