别再死磕 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 深度集成、开发便利性高,特别适合流量不大的项目快速部署,避免"杀鸡用牛刀"的资源浪费。

相关推荐
拾玖不会code2 小时前
简单分表场景下的业务发散思考:分表如何保证丝滑?
后端
CryptoRzz2 小时前
印度尼西亚(IDX)股票数据对接开发
java·后端·websocket·web3·区块链
EndingCoder3 小时前
类的继承和多态
linux·运维·前端·javascript·ubuntu·typescript
用户47949283569153 小时前
React 终于出手了:彻底终结 useEffect 的"闭包陷阱"
前端·javascript·react.js
程序员猫哥3 小时前
前端开发,一句话生成网站
前端
咕白m6253 小时前
通过 C# 快速生成二维码 (QR code)
后端·.net
踏浪无痕3 小时前
架构师如何学习 AI:三个月掌握核心能力的务实路径
人工智能·后端·程序员
Younglina3 小时前
一个纯前端的网站集合管理工具
前端·vue.js·chrome
木头程序员3 小时前
前端(包含HTML/JavaScript/DOM/BOM/jQuery)基础-暴力复习篇
开发语言·前端·javascript·ecmascript·es6·jquery·html5