Node.jsは、httpポート80(デフォルトポート)で実行中に次のエラーをスローします。
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)
ノードにはルートアクセスが必要であることがわかりました。
通常、通常の状況ではルートアクセスを許可しません。ポート80(またはポート<1024)で使用するためのベストプラクティスは何ですか。
この link には同じ質問がありますが、答えは1つだけです(つまり、PREROUTING)。私のソリューションは他の方法も提供しています。
PREROUTING以外のリソースを徹底的に調べなければならないので、1つの場所ですべての回答を得るためにこれを書いています。知識を共有するためにすべての回答を1か所で行うのはなぜですか
参考:通常のユーザー権限では、1024未満のポートでソケットを実行できません。そのためにはrootアクセスが必要です。
Sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
次に、ポート3000でNode.jsを起動します。ポート80へのリクエストはポート3000にマッピングされます。
/etc/rc.localファイルを編集して、その行からSudoを除いたものも追加する必要があります。これにより、マシンの起動時にリダイレクトが追加されます。 /etc/rc.localにあるSudoは必要ありません。システムのブート時にコマンドがrootとして実行されるためです。
参照 リンク
目的:-完全なルートアクセスを提供するのではなく、任意のポートでサーバーを実行するために通常のユーザーがアクセスするためのsocket_root権限のみを付与します。
rootユーザーとしてアプリケーションを実行したくないのですが、問題があります。安全なユーザーにはデフォルトのHTTPポート(80)を使用する権限がありません。目標は、http://localhost
のような使いやすいURLに移動して、訪問者が使用できるWebサイトを公開できるようにすることです。
残念ながら、ルートとしてサインオンしない限り、通常http://localhost:3000
などのURLを使用する必要があります-ポート番号に注意してください。
多くの人がここで立ち往生していますが、解決策は簡単です。いくつかのオプションがありますが、これは私が好きなものです。次のコマンドを入力します。
Sudo apt-get install libcap2-bin
Sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
ここで、Nodeアプリケーションにポート80で実行したいことを伝えても、文句を言わないでしょう。
参照 リンク
一般情報リファレンス link Apache