CentOS+Nginx+Node.js+socket.io(WebSocket)

Node.jsで動かすsocket.ioのサーバーの設定

socket.ioのインストール

socket.ioのサーバーコードを配置するディレクトリでsocket.ioをnpmでインストール

npm install socket.io

node_moduleはnpmを呼び出したディレクトリにインストールされる。

socket.ioを利用するソースコードが「server.node」とした場合において
そのファイルが「~/work/」に配置されていたとする。

その場合「~/work/」においてnpm installを呼び出して、socket.ioをインストールする必要がある。

cd ~/work
npm install socket.io
node server.node

socket.ioサーバーのコードを書く

var io = require('socket.io').listen(10112);
io.sockets.on('connection', function (socket) {}

ここで待ち受けポートを指定する。Nginxで利用していないいポートを使う。
このポートは、外部PCから接続される(クライアントのブラウザから)ので
Node.jsを動かすマシンのFireWallの設定を確認しておく。

Nginxの設定

/etc/nginxi/conf.d/default.confを書き換える

location /socket.io/ {
	proxy_pass http://<Node.jsサーバー>:10112;
	#proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection "upgrade";
}

proxy_http_versionは、あるとConfigが通らないので外した。

ここで指定するpassは、nginxから見たWecSocketサーバーのアドレス(socket.ioが動いているnode.jsのアドレス)
NginxとNode.jsが同じサーバーで動いている場合は、単にhttp://localhost:10112で良い。

次にブラウザ側.htmlの実装

socket.ioの読み込み。

<script src="/socket.io/socket.io.js"></script>

ここでアクセスされる/socket.io/は、先ほど指定したnginxの設定となる。
つまり、nginxを通してsocket.ioサーバーに接続して、そこからsocket.io.jsを取得している。

Node.js(socket.io)サーバーへの接続

//Connect to WebSocket server
var socket = io.connect('http://<Node.jsサーバー>:10112');

//Callback when connect to server.
socket.on('connect', function () {
    console.log( "connect to server" );
});

ここで指定するアドレスは、WecSocketサーバーのアドレス(socket.ioが動いているnode.jsのアドレス)