【问题标题】:"Application has thrown an uncaught exception and is terminated: Error: listen EACCES 0.0.0.0:80"“应用程序抛出未捕获的异常并终止:错误:监听 EACCES 0.0.0.0:80”
【发布时间】:2017-04-08 06:25:36
【问题描述】:

我在这里搜索了有关此错误的其他问题,但找不到解决方案。

昨天我在Azure上部署了一个Node + Express + Socket.IO网站,还是不行。我得到了错误

Application has thrown an uncaught exception and is terminated: Error: listen EACCES 0.0.0.0:80

在这段代码中:

// more code ...

var app = express();

var server = require('http').Server(app);

var io = require('socket.io')(server);

// right here
server.listen(portNumber, function () {
  console.log('Server listening at port %d', portNumber);
});

// more code ...

看起来好像另一个进程已经在监听这个端口。也许是 IIS 服务器?我不确定。

【问题讨论】:

  • 您是否为您的应用设置了任何环境变量(Azure 门户中的应用设置)?

标签: node.js azure iis iisnode


【解决方案1】:

你应该设置portNumber如下:

var portNumber = process.env.port || process.env.PORT || 1337

Azure 在变量process.env.PORT 中传递一个端口,您必须使用它,因为它不是真正的端口,而是像\\\\.\\pipe\\2f95e604-fc02-4365-acfc-010a26242d02 这样的管道。

【讨论】:

    【解决方案2】:

    此错误意味着您没有权限侦听该端口。如果其他东西已经在该端口上侦听,您应该会收到如下错误:

    Error: listen EADDRINUSE 0.0.0.0:80
    

    您需要以 root 身份运行才能监听 1024 以下的端口。

    或者您可以运行反向代理,将请求从端口 80 代理到您的应用侦听的某个更高端口。

    【讨论】:

    • 这对于 Azure 中的 Web 应用来说听起来过于复杂。其他人也需要这样做吗?
    【解决方案3】:

    尝试以 root 用户身份运行应用程序。

    sudo node app.js
    

    【讨论】:

    • 但是这是Windows环境..没有sudo
    • 抱歉,我不知道,我建议使用process.env.port 作为您的端口号。你可以试试,告诉我你得到了什么?
    • var portNumber = process.env.port;
    【解决方案4】:

    我不知道 Azure,但我知道:有东西试图监听端口 80,这需要管理员访问权限 (windows)/sudo 权限 (ubuntu)。 首先,更改您的设置,端口 80 是计算机监听来自外部世界的任何内容的主要端口,请勿更改。 如果您的应用程序发生错误,授予您的应用程序管理员访问权限/sudo 权限可能会导致整个系统崩溃,请不要将这些权限授予应用程序。 如果你必须监听 80 端口,监听另一个端口,然后从 80 端口代理到那个端口

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2019-01-24
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多