别再死磕 Nginx!http-proxy-middleware 低配置起飞

大家好,我是凌览。

如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连(点赞评论转发),给我一些支持和鼓励谢谢。

前言

已有一个去水印下载鸭后端服务,域名配置、服务器端口均已配置稳定。

现在我另有一个后端服务,假设取名叫去水印下载鸭后端服务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 深度集成、开发便利性高,特别适合流量不大的项目快速部署,避免"杀鸡用牛刀"的资源浪费。

相关推荐
涡能增压发动积16 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o16 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨16 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz16 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
swg32132116 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
从前慢丶16 小时前
前端交互规范(Web 端)
前端
tyung16 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald16 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
CHU72903516 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing16 小时前
Page-agent MCP结构
前端·人工智能