say*_*bir 17 https node.js socket.io
我正在尝试创建 https 服务器以通过节点 js 测试套接字 io。根据这个页面
openssl genrsa -out privatekey.pem 2048
openssl req -new -key privatekey.pem -out certrequest.csr
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
Run Code Online (Sandbox Code Playgroud)
我创建了privatekey.pem
,certificate.pem
这是我的代码:
var express = require('express');
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('privatekey.pem'),
cert: fs.readFileSync('certificate.pem')
};
var app = express();
var server = https.createServer(options, app).listen(443);
var io = require('socket.io').listen(server,()=>{
console.log('listen to https');
});
io.on('connection', function (socket) {
console.log(' user connected');
socket.on('disconnect', function () {
console.log('a user disconnected');
});
});
Run Code Online (Sandbox Code Playgroud)
但是在运行服务器后我收到了这个错误:
tazik@mx:/mnt/Projects/Projects/nodejs/socketserver
$ node app.js
events.js:288
throw er; // Unhandled 'error' event
^
Error: listen EACCES: permission denied 0.0.0.0:80
at Server.setupListenHandle [as _listen2] (net.js:1292:21)
at listenInCluster (net.js:1357:12)
at Server.listen (net.js:1445:7)
at Object.<anonymous> (/mnt/Projects/Projects/nodejs/socketserver/app.js:15:24)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.Module._load (internal/modules/cjs/loader.js:901:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1336:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EACCES',
errno: 'EACCES',
syscall: 'listen',
address: '0.0.0.0',
port: 80
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 linux mx 。
Soh*_*han 38
非特权用户(不是 root)无法在 1024 以下的端口上打开侦听套接字。
检查这个
授予安全用户使用端口 80 的权限
请记住,我们不想以 root 用户身份运行您的应用程序,但有一个问题:您的安全用户没有使用默认 HTTP 端口 (80) 的权限。您的目标是能够发布访问者可以通过导航到易于使用的 URL(如 http://ip:port/)来使用的网站
不幸的是,除非您以 root 身份登录,否则您通常必须使用类似 http://ip:port 的 URL - 其中端口号 > 1024。
很多人被困在这里,但解决方案很简单。有几种选择,但这是我喜欢的一种。键入以下命令:
Run Code Online (Sandbox Code Playgroud)> sudo apt-get install libcap2-bin > sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
现在,当您告诉 Node 应用程序您希望它在端口 80 上运行时,它不会抱怨。
编辑:在setcap
命令中添加一个空格
huy*_*ytc 20
我相信您需要 root 权限才能在 1024 以下的端口上运行。
sudo node app.js
Run Code Online (Sandbox Code Playgroud)
如果您没有 sudo 帐户,请尝试使用其他端口,例如 8080 和 4433。
编辑:正如其他人指出的那样,不建议这样做。在采用此方法之前,请先了解风险。否则,请参阅Sohan的答案:/sf/answers/4226120041/。
这是权限问题,直接写成sudo
前缀即可
sudo npm start
Run Code Online (Sandbox Code Playgroud)
这对我有用!
@Sohan answer alternate
I had to use yum
instead of apt-get
sudo yum install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36439 次 |
最近记录: |