大家好,我是凌览。
- 个人网站:blog.code24.top
- 去水印下载鸭:nologo.code.top
如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连(点赞、评论、转发),给我一些支持和鼓励谢谢。
前言
已有一个去水印下载鸭后端服务,域名配置、服务器端口均已配置稳定。
现在我另有一个后端服务,假设取名叫去水印下载鸭后端服务Pro。
现在需要去水印下载鸭后端服务、去水印下载鸭后端服务Pro部署在同一台服务器,并且两者都通过80、443公开端口对外访问。这时大多选择Nginx反向代理让去水印下载鸭后端服务、去水印下载鸭后端服务Pro共用一个门牌号,流量自动分流,证书复用。
对于并发量大的后台选择Nginx没毛病,但对流量小到连"并发"俩字都嫌重,再搬出 Nginx 就是拿青龙偃月刀切葱花------刀好,但真没必要。
Node 玩家直接 http-proxy-middleware 一把梭,省出配 nginx 的功夫,早把需求迭代上线了。
本文就来介绍怎样用 http-proxy-middleware 三分钟搭好反向代理,让"去水印下载鸭"与"Pro 版"同吃 80/443,零 Nginx、低配置。
http-proxy-middleware是什么
http-proxy-middleware是一个基于 Express.js 框架的中间件,它能够将一个或多个 HTTP 请求代理到另一个服务器上。常用场景如:前端开发遇到跨域问题时,通过配置http-proxy-middleware,可以将前端请求代理到后端服务器,从而巧妙地避开浏览器的跨域限制。
安装与基础使用
首先安装http-proxy-middleware:
jsx
npm install http-proxy-middleware
安装完成后,我们就可以在项目中引入并使用它了。以下是一个简单的 Express 应用中使用http-proxy-middleware代理请求的示例:
jsx
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
// 创建一个代理中间件,将所有以/api开头的请求代理到目标服务器
app.use('/api', createProxyMiddleware({
target: 'http://target-server.com', // 目标服务器地址
changeOrigin: true, // 允许修改请求头中的origin字段
}));
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
运用到实际项目
去水印下载鸭后端服务跑在 3000,在生产环境中会占住公网 80;去水印下载鸭后端服务Pro躲在 3010,只对内敞开。现在把 http-proxy-middleware 直接塞进3000去水印下载鸭后端服务,只加一条路由规则:
接口一旦撞上 /api/gold-price/*/**,当场被悄悄转给3010端口服务。
jsx
const proxyGoldPrice = require('./middleware/proxyGoldPrice.js');
//省略
// 👇 新增:代理 gold-price 路由
app.use('/api/gold-price', proxyGoldPrice);
//省略
在middleware目录创建proxyGoldPrice.js 文件,Express中间件配置放置在一起.

proxyGoldPrice.js内容:
jsx
// middleware/proxyGoldPrice.js
const { createProxyMiddleware } = require('http-proxy-middleware');
const proxyGoldPrice = createProxyMiddleware({
target: "http://127.0.0.1:3010",
changeOrigin: true,
// 如果目标服务不需要 /api 前缀,可启用 pathRewrite:
pathRewrite: {
//重写路径
'^/': '/api/gold-price/',
}
});
module.exports = proxyGoldPrice;
在上述代码中,我们通过createProxyMiddleware函数创建了一个代理中间件。当应用接收到以/api/gold-price开头的请求时,它会自动将该请求转发到http://127.0.0.1:3010。
举个例子:访问http://127.0.0.1:3000/api/gold-price/realtime时,命中app.use('/api/gold-price', proxyGoldPrice)路由,http-proxy-middleware会把http://127.0.0.1:3000/api/gold-price/realtime转发到http://127.0.0.1:3010/realtime。
上述例子中转发后的访问的是http://127.0.0.1:3010/realtime,但在去水印下载鸭后端服务Pro路由前缀都有/api/gold-price,所以会出错没找到对应路由。
pathRewrite则是解决些问题的配置,它用于路径重写:
jsx
pathRewrite: {
//重写路径
'^/': 'http://127.0.0.1:3010/realtime',
}
表示把/替换成/api/gold-price/。转发后路径就是http://127.0.0.1:3010/api/gold-price/realtime。该字段可配可不配,取决于你的目标服务器。
好了,http-proxy-middleware基础使用方法介绍完毕。有不同代理需求功能可以移步看它的官方文档。
工具对比
来个简单对比:
| 特性 | http-proxy-middleware | http-proxy | nginx |
|---|---|---|---|
| 配置复杂度 | 中等 | 高 | 高 |
| Node.js 集成 | 优秀 | 优秀 | 需要单独进程 |
| 开发便利性 | 优秀 | 良好 | 一般 |
| 性能 | 良好 | 优秀 | 优秀 |
| WebSocket 支持 | 是 | 是 | 是 |
| 路径重写 | 是 | 有限 | 是 |
| 适用场景 | 轻量网关、Node 栈一体化 | 底层库、自定义代理逻辑 | 高并发、多语言、企业级网关 |
http-proxy-middleware是http-proxy二次封装,本质是一个东西。http-proxy-middleware的存在让http-proxy更易使用。
最后
通过在 Node.js 应用中集成 http-proxy-middleware 中间件,只需几行代码配置就能让多个后端服务共用 80/443 端口,实现请求分流和路由转发。相比 Nginx,这种方案配置简单、与 Node.js 深度集成、开发便利性高,特别适合流量不大的项目快速部署,避免"杀鸡用牛刀"的资源浪费。