質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

2回答

4226閲覧

noode.jsのexpress-generatorのPort 80 requires elevated privilegesの原因を教えてください。

wadaiko

総合スコア1

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2021/02/20 01:02

前提・実現したいこと

noode.jsのexpress-generatorを使用して80ポートで接続したいですが、
「Port 80 requires elevated privileges」が発生し、サーバーが立ち上がりません。

発生している問題・エラーメッセージ

npm start > myapp@0.0.0 start > node ./bin/www Port 80 requires elevated privileges npm ERR! code 1 npm ERR! path /home/ec2-user/×××/website/myapp npm ERR! command failed npm ERR! command sh -c node ./bin/www npm ERR! A complete log of this run can be found in: npm ERR! /home/ec2-user/.npm/_logs/2021-02-20T00_24_26_988Z-debug.log

該当のソースコード

#!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('myapp:server'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '80'); app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ server.listen(port); server.on('error', onError); server.on('listening', onListening); /** * Normalize a port into a number, string, or false. */ function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) { // named pipe return val; } if (port >= 0) { // port number return port; } return false; } /** * Event listener for HTTP server "error" event. */ function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } /** * Event listener for HTTP server "listening" event. */ function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug('Listening on ' + bind); }

試したこと

サーバーの問題ではないかと考え、eginxの80ポートでは接続されていました。

補足情報(FW/ツールのバージョンなど)

■プラットフォーム
AWS EC2 Amazon Linux
■言語
javascript(node.js)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

80ポートで待ち受けるにはroot権限が必要というのは確かにその通りなのですが、アプリケーションをroot権限で動かすと、アプリケーションに脆弱性があった場合に、root権限を乗っ取られることにつながります。なので、アプリケーションは非root権限で動かして1024以上のポートで待ち受け、何らかの方法で80ポートに変更してやる方法が一般的です。

方法は何種類かありますか、手軽なものとしては下記があります。

  • iptables等でリダイレクトする
  • nginx等リバースプロキシを使う

実験ならroot権限を使ってみてもよいと思いますが、インターネットに公開するのであれば、上記の方法をお勧めします。

投稿2021/02/20 02:30

ockeghem

総合スコア11705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージのとおりです。80番ポートを開くにはルート権限が必要です。

投稿2021/02/20 01:04

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wadaiko

2021/02/20 01:48

rootユーザーで実行してみました。 [root@ip-xxx-xxx-x-xx myapp]# npm start bash: npm: command not found
maisumakun

2021/02/20 02:00

rootではnpmにパスが通っていないようなので、設定を行ってください。
wadaiko

2021/02/20 08:05

ありがとうございます。 root権限でnodeとnpmインストールしたら開きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問