Nodejs 要让 node 监听 80 的话只能用 Nginx 转发吗?

Nodejs 要让 node 监听 80 的话只能用 Nginx 转发吗?
不知道用 root 运行 node 是否可行?因为不确定 Nginx 是否会修改 header (比如 gzip )。

11 回复

吓? 80 没占用的话…不是顺便跑的吗…
跟 root 有啥关系…你的 nginx 也是 用 root 老跑的吗?


听过“能力”吗?
Since Kernel 2.6.33.

不是 root 权限几乎不能玩 1024 以下的端口…,运维常识

Port <= 1024,正常情况下只有特权进程才能 Listen,Nginx 先以 root bind 再 setuid,不是以 root 身份提供服务的!

不是可以用 CAP_NET_BIND_SERVICE 让普通用户也能跑低端口吗…

你说的…这个我知道啊…你后来补充"能力"和 setuid 不就是非 root 用户使用低端口方法吗…

高内核版本随便用,低内核就呵呵

你这个是针对 Linux 的问题吧,应该发到 Linux 区。

看起来只是开发过程中用用,建议直接用另外的端口 3000、5000、8080 等。
如果需要查看 header 区别,一个在 nginx 后访问,一个直接访问,把两种情况的 HTTP header 打印出来对比就行了。

非要使用 80 端口的话,可以参考这个(来自 brew info nginx-full):
$ sudo chown root:wheel /usr/local/opt/nginx-full/bin/nginx
$ sudo chmod u+s /usr/local/opt/nginx-full/bin/nginx

别瞎起 header 名字 nginx 就不会改。

居然质疑 nginx …… 你质疑 node 也好一点啊

关于Node.js监听80端口的问题,不一定非要使用Nginx进行转发。虽然Nginx是一个强大且常用的反向代理服务器,但还有其他方法可以实现Node.js监听80端口。

首先,Node.js本身就可以创建一个HTTP服务器来监听特定的端口,包括80端口。以下是一个简单的示例代码:

const http = require('http');
const port = 80;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

server.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

但请注意,由于80端口是HTTP服务的标准端口,通常需要管理员权限才能监听。因此,在运行上述代码时,可能需要使用管理员权限(例如在Linux中使用sudo)。

另外,除了Nginx之外,还可以使用其他反向代理服务器或工具来实现端口转发,如iptables、Apache等。不过,Nginx因其高性能和易用性而广受欢迎。

总之,虽然Nginx是一个常用的选择,但并非唯一选择。根据具体需求和环境,可以选择最适合的方法来实现Node.js监听80端口。

回到顶部