nginx_tcp_proxy_module を入れてnode.jsのsocket.ioを動かすnginxの設定
設定をメモ
node.js の、listenするあたりはこうしてみた。
// node.js(express)はunixソケットをlistenさせてみる。 var app = module.exports = express.createServer(); var sockPath = './tmp/sockets/express.sock'; app.listen(sockPath, function() { fs.chmodSync(sockPath, '777'); }); // socket.io はポート3001をlistenさせる。 var io = require('socket.io').listen(3001),
クライアントサイドで、socket.ioにつなぐコード
// 実際にはポート3001で動かしてるけど、 // 別のポート(3000)でふつうにnginxにリクエストして、 // tcp_poxy_moduleがsocket.ioの3001へプロキシする。 // こうしないと動かなかった var socket = io.connect('http://example.com:3000'); socket.on('hey hey hey hey', function(data) { console.log(data); });
nginxの設定
http { # 本当はhttpディレクティブのなかは他の設定もいろいろあるけど省略 upstream node-js-myapp { server unix:/var/apps/myapp/current/tmp/sockets/express.sock; } server { listen 80; server_name example.com; root /var/www/myapp; location / { try_files $uri @node-js-myapp; } location ^~ /socket.io/ { try_files $uri @node-js-myapp; } location /websockets_status { check_status; } location @node-js-myapp { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://node-js-myapp; } } } tcp { upstream websocket-myapp { server 127.0.0.1:3001; check interval=3000 rise=2 fall=5 timeout=1000; } server { listen 3000; server_name example.com; proxy_read_timeout 200000; proxy_send_timeout 200000; proxy_pass websocket-myapp; } }