[解決済み】Node.jsのほとんどのポートでリスニングするとEACCESエラーが発生する。
質問
あるアプリをテストしています(できれば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}`));
関連
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み] HTTPステータスコード0 - Error Domain=NSURLErrorDomain?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.js/Windowsのエラーです。ENOENT, stat 'C:\Users﹑RTAppData﹑Roaming﹑npm'.
-
[解決済み] ローカルファイルの読み込み時に "Cross origin requests are only supported for HTTP." というエラーが発生する。
-
[解決済み] Node.jsで "Cannot find module "エラーを解決するにはどうしたらいいですか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】HTTP1.1とHTTP2.0の違いは何ですか?[クローズド]
-
[解決済み] HTTP GETリクエストにcontent-typeヘッダーは必要ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み] PUT、DELETE、HEADなどのメソッドは、ほとんどのウェブブラウザで利用可能ですか?
-
[解決済み] ブラウザのCookieドメインはどのように機能するのですか?
-
[解決済み】ファイルから取得した投稿データでcURLにリクエストを送信する。
-
[解決済み】AngularでHTTPリクエストにURL引数(クエリ文字列)を渡すには?
-
[解決済み】HTTPの "Content-Type "ヘッダーのすべての可能な値は何ですか?
-
[解決済み】HTTP1.1とHTTP2.0の違いは何ですか?[クローズド]
-
[解決済み】HTTP 301と308のステータスコードの違いは何ですか?
-
[解決済み] なぜCache-Control属性はリクエストヘッダ(クライアントからサーバーへ)に送信されるのですか?