Node.jsで80番ポートを使用するHTTPサーバ

  • このエントリーをはてなブックマークに追加
  • LINEで送る

一般ユーザーで動作させたい

0〜1023番はウェルノウンポートと呼ばれ、Linuxではスーパーユーザー(root権限)でないとサーバとして動かすことができません。しかし何も考えずにsudo node xxx.js的な感じで起動するとプロセスがrootで動作するため恐ろしいことこの上なく夜も眠れない日々を過ごす羽目になります。

そこで、以下のようにいったんrootとして起動した後に、子プロセスを別のユーザーに切り替えることで解決を図ります。

- Sponsored Link -

コード例

/**
 * Nodejs + expressで80番ポートを使用する(一般ユーザー)
 *
 * Usage:
 *   $ sudo node index.js
 *   listening on *:80
 * 
 *  親プロセスはrootだが、子プロセスが指定したユーザーになるる。
 */

var app  = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res){
  res.send("<h1>It works.</h1>");
})

http.listen(80, function(){   //80番ポートでlistenする
  // ユーザーを変更する
  process.setuid(501);

  console.log('listening on *:80');
});

ユーザーidの確認方法

setuid()メソッドに指定する数値は以下のようにidコマンドで確認することができます。node専用ユーザーを作っておくのが良いでしょう。

### 指定ユーザーのIDを表示(以下なら48)
$ id apache
uid=48(apache) gid=48(apache) groups=48(apache)

### オプションを指定しないとログイン中ユーザーのIDを表示
$ id 
uid=501(katsube) gid=501(ws) groups=501(ws),10(wheel)
- Sponsored Link -

ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください