Nodejs:怎么在 Ubuntu 下让多个独立的 node 进程都使用 80 端口

发布于 1周前 作者 vueper 来自 nodejs/Nestjs

Nodejs:怎么在 Ubuntu 下让多个独立的 node 进程都使用 80 端口
新手, 不知道该怎么入手, 有没有什么资料可以看

11 回复

nginx 前面转发


nginx + upstream (配置) 反向转发,通过 nginx 监听 80 端口, nginx 根据配置去转发

反向代理…

反向代理或者 使用 Cluster API

简单 用 cluster 的 API 多起几个就是, 但是要看你有几个核心

反代,或者调权限(记得有个权限就可以调是否允许占用 80 端口的)

用 passenger

明确一下需求吧。
我很怀疑你需要的是一个反向代理去分配给多台 server ,
我猜测你需要不同域名的多个虚拟主机的可能性更大一些。

多个进程绑定同一个端口的结果是操作系统会随机把连接分配给任一监听进程。
你需要的是反代,负责根据地址把请求转发给对应的进程。

在 Ubuntu 下,多个独立的 Node.js 进程不能直接绑定到同一个端口(如 80 端口),因为这会引发端口冲突。然而,你可以通过以下几种方法实现多个 Node.js 应用共享 80 端口:

方法一:使用 Nginx 作为反向代理

  1. 安装 Nginx

    sudo apt update
    sudo apt install nginx
    
  2. 配置 Nginx: 编辑 /etc/nginx/sites-available/default 或创建一个新的配置文件,例如 /etc/nginx/sites-available/myapp,内容如下:

    server {
        listen 80;
        
        location /app1 {
            proxy_pass http://localhost:3000;  # 第一个 Node.js 应用运行在 3000 端口
        }
    
        location /app2 {
            proxy_pass http://localhost:4000;  # 第二个 Node.js 应用运行在 4000 端口
        }
    }
    
  3. 重启 Nginx

    sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
    sudo systemctl restart nginx
    

方法二:使用 iptables 进行端口转发(不推荐用于生产环境)

这种方法涉及更复杂的网络配置,且不如 Nginx 灵活和安全。

结论

推荐使用 Nginx 作为反向代理,因为它不仅解决了端口冲突问题,还可以提供负载均衡、SSL 终止等高级功能。同时,Nginx 的配置相对简单且易于管理。

回到顶部