1. ホーム
  2. http

[解決済み】Node.jsのほとんどのポートでリスニングするとEACCESエラーが発生する。

2022-03-29 09:41:45

質問

あるアプリをテストしています(できればheroku上で動作するようにしたいのですが、ローカルでも問題があります)。 http.Server.listen()を実行するとEACCESエラーが発生するのですが、一部のポートにしか発生しません。

そこで、ローカルでは、次のように実行しています。

joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
    at Server._doListen (net.js:1062:5)
    at net.js:1033:14
    at Object.lookup (dns.js:132:45)
    at Server.listen (net.js:1027:20)
    at [object Context]:1:3
    at Interface.<anonymous> (repl.js:150:22)
    at Interface.emit (events.js:42:17)
    at Interface._onLine (readline.js:132:10)
    at Interface._line (readline.js:387:8)
    at Interface._ttyWrite (readline.js:564:14)

ポート900(または私が試した他の20のポート)では何も実行していないので、これはうまくいくはずです。 奇妙なのは、それが が行います。 は、いくつかのポートで動作します。 例えば、ポート3000は完全に動作します。

この原因は何でしょうか?

アップデート1:

私のローカルコンピュータでは、特定のポートにバインドするためにrootとしてnodeを実行しなければならないので、EACCESエラーが発生するのだとわかりました。 なぜこうなるのかわかりませんが、sudoを使うと直ります。 しかし、これではHerokuでどのように修正すればいいのかがわからない。 Herokuではrootで実行する方法がないので、80番ポートをリッスンするにはどうすればいいのでしょうか?

解決方法は?

ワークステーションで動作させる

原則として、root権限で動作するプロセスは、1024以下のポートにバインドすることはできません。

そのため、より高いポートを試すか、または、以下の方法で昇格した特権で実行します。 sudo . 低いポートにバインドした後に権限をダウングレードするには、次のようにします。 process.setgid process.setuid .

herokuで動作させる

heroku上でアプリを実行する場合、環境変数PORTで指定されたポートを使用する必要があります。

参照 http://devcenter.heroku.com/articles/node-js

const server = require('http').createServer();
const port = process.env.PORT || 3000;

server.listen(port, () => console.log(`Listening on ${port}`));