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

简介: Nodejs 第二十六章(反向代理)

什么是反向代理?

反向代理(Reverse Proxy)是一种网络通信模式,它充当服务器和客户端之间的中介,将客户端的请求转发到一个或多个后端服务器,并将后端服务器的响应返回给客户端。

  1. 负载均衡:反向代理可以根据预先定义的算法将请求分发到多个后端服务器,以实现负载均衡。这样可以避免某个后端服务器过载,提高整体性能和可用性。
  2. 高可用性:通过反向代理,可以将请求转发到多个后端服务器,以提供冗余和故障转移。如果一个后端服务器出现故障,代理服务器可以将请求转发到其他可用的服务器,从而实现高可用性。
  3. 缓存和性能优化:反向代理可以缓存静态资源或经常访问的动态内容,以减轻后端服务器的负载并提高响应速度。它还可以通过压缩、合并和优化资源等技术来优化网络性能。
  4. 安全性:反向代理可以作为防火墙,保护后端服务器免受恶意请求和攻击。它可以过滤恶意请求、检测和阻止攻击,并提供安全认证和访问控制。
  5. 域名和路径重写:反向代理可以根据特定的规则重写请求的域名和路径,以实现 URL 路由和重定向。这对于系统架构的灵活性和可维护性非常有用。

代码实现

用到的库 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端口 并且无跨域

目录
相关文章
|
4月前
|
存储 缓存 JavaScript
Nodejs 第二十七章(动静分离)
Nodejs 第二十七章(动静分离)
28 0
|
1月前
|
应用服务中间件 Apache nginx
web后端-web服务器对比
web后端-web服务器对比
|
4月前
|
数据采集 JavaScript 前端开发
Nodejs 第十一章(CSR SSR SEO)
Nodejs 第十一章(CSR SSR SEO)
30 0
|
7月前
|
开发框架 Python Windows
嵌入式工程师入门前后端系列2:搭建web.py环境
嵌入式工程师入门前后端系列2:搭建web.py环境
|
8月前
|
JavaScript 前端开发 应用服务中间件
前端学习笔记202305学习笔记第二十三天-vue打包nginx部署
前端学习笔记202305学习笔记第二十三天-vue打包nginx部署
61 0
|
10月前
|
网络协议 Java 数据库连接
java后端跨域 配置 代码
java后端跨域 配置 代码
|
JavaScript 前端开发 中间件
nodejs各种框架跨域设置
nodejs各种框架跨域设置
|
安全 Java 数据建模
Nginx如何支持HTTPS?手把手教会你每一步操作都贼简单
随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助! 生成SSL自签名证书 虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的! 首先创建SSL证书私钥,期间需要输入两次用户名和密码,生成文件为blog.key;
406 0
Nginx如何支持HTTPS?手把手教会你每一步操作都贼简单
|
Web App开发 JavaScript 前端开发
javascript开发后端程序的神器nodejs
javascript开发后端程序的神器nodejs
javascript开发后端程序的神器nodejs
|
SQL 缓存 开发框架
四个最佳后端框架推荐
在这个瞬息万变的世界中,网站和 Web 应用程序已经成为公司拥有卓越线上版图的关键。稳固的线上版图,特别是网站和应用程序,可以突破你的能力上限,带来更多的收入。是的,网站和应用程序的质量会影响到结果,所以为网站和应用程序开发选择适当的后端框架至关重要。
1703 0
四个最佳后端框架推荐

热门文章

最新文章