Ryusuke Fuda's Tech Blog

Softweare Enginier about Web, iOS, Android.

node.js ドメインのポート番号なくす

ポート80のサーバーを作り、プロキシサーバとしてそこにアクセスが来るようにして、そこから各ポートへ飛ばす。

■app.jsを作る。

var url  = require('url'),
    http = require('http');

var port = 80;

http.createServer(function(serverRequest, serverResponse) {
  var requestUrl = url.parse(serverRequest.url);
  var body = [];

  console.log(requestUrl.href);

  serverRequest.on('data', function(data) {
    body.push(data);
  });
  serverRequest.on('end', function() {
    var request = http.request({
      host:    serverRequest.headers.host,
      port:    3000, // 飛ばしたいポート
      path:    requestUrl.path,
      method:  serverRequest.method,
      headers: serverRequest.headers
    },
    function(response) {
      serverResponse.writeHead(response.statusCode, response.headers);
      response.on('data', function(chunk) {
        serverResponse.write(chunk);
      });
      response.on('end', function() {
        serverResponse.end();
      });
    });
    if(body.length > 0) {
      request.write(body.join(''));
    }
    request.end();
  });
}).listen(port);

■起動させる
※node.jsはポート80の時、sudo じゃないと起動できない。

$ sudo node app.js

■正常に動くことを確認しforeverで常時起動させる
普通にsudo forever start app.jsしてもnodeがsbinの中にないのでリンクはる

$ sudo ln -s ~/.nave/installed/0.8.4/bin/node /sbin/node
sudo forever start app.js

以上でポート指定なしでドメインを叩くと:3000へいく

参考)
http://rockf.es/blog/2012/02/02/node/http://blog.monoweb.info/blog/2012/05/18/nodejs-proxy-server/