You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Node.js实现单域名路由转发至多端口Web服务器的可行性咨询

用Node.js搭建单域名路径反向代理的方案

当然可以!在Node.js生态里完全能实现你要的反向代理需求——不用修改现有Web服务器,只需要一个运行在80端口的新进程,根据请求路径把流量转发到对应的本地端口。下面给你两种实用的实现方式:

方式一:Express + http-proxy-middleware(推荐,简洁易维护)

这是最常用的方案,借助Express框架和专门的代理中间件,配置简单,还能方便扩展日志、鉴权等额外功能。

步骤1:安装依赖

在新项目目录下执行:

npm install express http-proxy-middleware

步骤2:编写代理服务器代码

创建proxy-server.js文件,内容如下:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

// 配置/process1路径的转发规则
app.use('/process1', createProxyMiddleware({
  target: 'http://localhost:8000', // 转发到你的第一个服务端口
  changeOrigin: true, // 让目标服务器收到的请求头Host为目标地址,避免部分服务的Host校验
  pathRewrite: {
    '^/process1': '' // 去掉请求路径中的/process1前缀,确保后端服务拿到正确的路径
  }
}));

// 配置/process2路径的转发规则
app.use('/process2', createProxyMiddleware({
  target: 'http://localhost:8001', // 转发到你的第二个服务端口
  changeOrigin: true,
  pathRewrite: {
    '^/process2': ''
  }
}));

// 监听80端口(注意:Linux/macOS需要用sudo运行,Windows需要管理员权限)
app.listen(80, () => {
  console.log('反向代理服务器已启动,监听80端口');
});

步骤3:运行服务

  1. 先启动你现有的两个Node.js服务,确保它们分别在8000和8001端口运行;
  2. 启动代理服务器:
    # Linux/macOS
    sudo node proxy-server.js
    
    # Windows(管理员命令行)
    node proxy-server.js
    

之后访问domain/process1就会转发到8000端口的服务,domain/process2转发到8001端口的服务,完全符合你的需求。

方式二:原生HTTP模块 + http-proxy(轻量无框架依赖)

如果你不需要Express的其他功能,也可以用Node.js原生HTTP模块配合http-proxy库实现,更轻量:

步骤1:安装依赖

npm install http-proxy

步骤2:编写代理服务器代码

创建proxy-server.js文件:

const http = require('http');
const httpProxy = require('http-proxy');

// 创建代理实例
const proxy = httpProxy.createProxyServer({});

// 创建HTTP服务器处理请求
const server = http.createServer((req, res) => {
  if (req.url.startsWith('/process1')) {
    // 重写路径,去掉/process1前缀
    req.url = req.url.replace(/^\/process1/, '');
    // 转发到8000端口
    proxy.web(req, res, { target: 'http://localhost:8000', changeOrigin: true });
  } else if (req.url.startsWith('/process2')) {
    // 重写路径,去掉/process2前缀
    req.url = req.url.replace(/^\/process2/, '');
    // 转发到8001端口
    proxy.web(req, res, { target: 'http://localhost:8001', changeOrigin: true });
  } else {
    // 处理根路径或其他未匹配的请求
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('404 Not Found');
  }
});

// 监听80端口
server.listen(80, () => {
  console.log('原生HTTP反向代理已启动,监听80端口');
});

步骤3:运行服务

和方式一一样,先启动现有服务,再启动代理服务器即可。

关键说明

  • changeOrigin配置:必须设置为true,否则目标服务器收到的请求头Host会是你的域名(比如domain),部分Web框架可能会因为Host不匹配拒绝请求;
  • pathRewrite配置:如果你的现有服务是基于根路径(/)处理请求,必须去掉前缀,否则后端会收到/process1/xxx这样的路径,导致404;
  • 端口权限:80是系统特权端口,普通用户无法直接监听,所以需要管理员权限运行代理服务器。

内容的提问来源于stack exchange,提问作者Strike Eagle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 07:37:34