无法服务端口 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 配置。
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 配置。