无法服务端口 80 express.js 反向代理 nginx

can't serve port 80 express.js reverse proxy nginx

Ubuntu 14.04。尝试使用 nodejs/expressjs 在端口 80 上为应用程序提供服务时我失去了理智。起初我收到一个 "Error: listen EACCESS" 错误(程序退出)。这是在我的本地机器上通过 运行 node as sudo 解决的。

然而,在我的 Linux 主机上,即使 sudo 也不会生效,我得到 "listen EADDRINUSE"(程序退出)。这里用 nginx 反向代理 expressjs。

更高编号的端口没有任何问题(例如默认 3000)

节点应用程序的删节版:

var express = require('express');
var app = express();

var myPort = 80;

app.listen(port, function() {
    console.log("listening on " + parseInt(myPort) + "...");
});

NGINX 配置

server {
    listen 80;
    listen [::]:80;

    server_name devjustice.com www.devjustice.com;
    location / {
            proxy_pass http://127.0.0.1:80;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            try_files $uri $uri/ =404;
}

我这辈子都想不出什么已经占据了这个地址吗? nginx 正在为其他配置文件提供服务,但没有任何内容(似乎?)涉及环回地址或使用相同的域名。谢谢你的帮助。其他 SO 帖子也提到了类似的问题,但我找不到解决方案。

您有两个进程试图侦听同一个端口,这是行不通的(至少在不使用 SO_REUSEPORT 的情况下是这样,但在这种情况下这没有意义)。只需为节点选择不同的端口并相应地调整您的 nginx 配置。