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

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

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

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

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

- SponsoredLink -

コード例

/**
 * 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)
- SponsoredLink -

同じカテゴリの記事

Donate

投げ銭お待ちしております!

BTC3A9nH1j7qQdKrSTrmnEdweo6zPqpHBmkxC
ETH0x1aE0541198D1F9f2908a25C35032A473e74D3731
XPXaQ9zv65F9ovfoMBrFGiPRG47aSHFhy8SX
MONAMTKgzSiS5BDueZkRCHySih24TGFwHThaDQ (MonaCoin)
ZNYZhnpf4RFYVQTAQiyoJg9dGoeC4bgT3BoSy (BitZeny)

コメントはお気軽に(゚∀゚)

This site uses Akismet to reduce spam. Learn how your comment data is processed.