什么是反向署理?

反向署理(Reverse Proxy)是一种网络通信形式,它充任服务器和客户端之间的中介,将客户端的恳求转发到一个或多个后端服务器,并将后端服务器的呼应回来给客户端。

  1. 负载均衡:反向署理能够依据预先定义的算法将恳求分发到多个后端服务器,以完成负载均衡。这样能够防止某个后端服务器过载,进步整体功能和可用性。
  2. 高可用性:经过反向署理,能够将恳求转发到多个后端服务器,以供给冗余和毛病转移。假如一个后端服务器出现毛病,署理服务器能够将恳求转发到其他可用的服务器,然后完成高可用性。
  3. 缓存和功能优化:反向署理能够缓存静态资源或常常拜访的动态内容,以减轻后端服务器的负载并进步呼应速度。它还能够经过紧缩、合并和优化资源等技术来优化网络功能。
  4. 安全性:反向署理能够作为防火墙,维护后端服务器免受恶意恳求和攻击。它能够过滤恶意恳求、检测和阻挠攻击,并供给安全认证和拜访控制。
  5. 域名和途径重写:反向署理能够依据特定的规则重写恳求的域名和途径,以完成 URL 路由和重定向。这对于体系架构的灵活性和可维护性非常有用。

Nodejs 第二十六章(反向署理)

代码完成

用到的库 http-proxy-middleware

npm install http-proxy-middleware

根目录自定义配置文件

xm.config.js

配置proxy署理

module.exports = {
    server:{
        proxy:{
        //署理的途径
            '/api': {
                target: 'http://localhost:3000', //转发的地址
                changeOrigin: true, //是否有跨域
            }
        }
    }
}

index.js 完成层

const http = require('node:http');
const fs = require('node:fs')
const url = require('node:url')
const html = fs.readFileSync('./index.html') //给html文件起个服务
const {createProxyMiddleware} = require('http-proxy-middleware')
const config = require('./xm.config.js')
const server = http.createServer((req, res) => {
    const {pathname} = url.parse(req.url)
    const proxyList = Object.keys(config.server.proxy) //获取署理的途径
    if(proxyList.includes(pathname)){ //假如恳求的途径在里面匹配到 就进行署理
        const proxy = createProxyMiddleware(config.server.proxy[pathname]) //署理
        proxy(req,res)
        return
    }
    console.log(proxyList)
    res.writeHead(200, {
        'Content-Type': 'text/html'
    })
    res.end(html) //回来html
})
server.listen(80) //监听端口

test.js 因为咱们从80端口转发到3000端口

const http = require('node:http')
const url = require('node:url')
http.createServer((req, res) => {
    const {pathname} = url.parse(req.url)
    if(pathname === '/api'){
        res.end('success proxy')
    }
}).listen(3000)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
          fetch('/api').then(res=>res.text()).then(res=>{
            console.log(res);
          })
    </script>
</body>
</html>

这样就从80署理到了3000端口 而且无跨域

Nodejs 第二十六章(反向署理)