当前位置: 首页 > news >正文

vue2 项目中实现动态代理,服务器上通过nginx部署 实现动态代理

一、前言&&原理

前言:vue2 项目中,请求接口是从表格的当前获取的,也就是接口ip:端口号:路经不确定,要实现点击表格当前行请求对应的接口

实现原理:将实际要请求的ip等信息存在请求头中,用的时候再取出来,项目和服务器上使用形参代替,从而达到动态代理效果

二、代码部分

1.修改utils下request文件

即修改代理前缀
例如

// 创建axios实例
const service = axios.create({// axios中请求配置有baseURL选项,表示请求URL公共部分baseURL: process.env.VUE_APP_DYNAMIC_API,// 超时timeout: 60000
})

2.增加环境变量

env文件中增加VUE_APP_DYNAMIC_API = '/dt-api

3.文件api.js中修改

例如

// 接口
export function getSyncServer(url) {return requestdt({url: '/getconfigs',method: 'get',IP: url})
}

4.修改文件vue.config.js

增加代理,例如

[process.env.VUE_APP_DYNAMIC_API]: {target: 'http://default-target',  // 默认目标(如果没有动态 IP,使用默认目标)changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_DYNAMIC_API]: ''}, // 动态代理目标router: (req) => {// 从请求头中获取 X-Device-IPconst deviceIp = req.headers['x-device-ip'];if (deviceIp) {// 根据 deviceIp 动态设置目标return `http://${deviceIp}`;}// 如果没有 X-Device-IP,使用默认目标return 'http://default-target';},onProxyReq: (proxyReq, req, res) => {// 获取请求头中的 X-Device-IPconst deviceIp = req.headers['x-device-ip'];if (deviceIp) {// 如果 X-Device-IP 存在,动态设置目标proxyReq.setHeader('Host', deviceIp);  // 可以设置代理请求的 Host 头proxyReq.setHeader('X-Device-IP', deviceIp);  // 将 IP 添加到请求头中proxyReq.setHeader('X-Forwarded-For', deviceIp);  // 传递 X-Forwarded-For 头// 根据 X-Device-IP 动态设置目标proxyReq.setHeader('X-Target-Host', deviceIp);  // 动态设置目标主机(可选)}}
},

三、服务器部署

通过nginx 代理,修改nginx.conf配置文件

例如

location ^~/dt-api/ {set $backend_ip $http_x_device_ip;# 检查请求头是否为空if ($backend_ip = "") {set $backend_ip "192.168.110.41:9011";  # 默认 IP 地址}# 使用 IP 地址代理请求proxy_pass http://$backend_ip/getconfigs;access_log /usr/local/nginx/logs/access.log;add_header X-Backend-IP $backend_ip;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Device-Ip $http_x_device_ip;
}

修改完后重新启动nginx,进行测试 发现已经实现效果了

下班~

http://www.lryc.cn/news/501634.html

相关文章:

  • 基于SpringBoot+Vue的民宿山庄农家乐管理系统
  • 【数据分享】1901-2023年我国省市县三级逐年最低气温数据(Shp/Excel格式)
  • 后端API接口设计标准(Java)
  • 网络安全法 -网络信息安全
  • matlab figure函数 single 数据类型
  • endroid/qr-code生成二维码,中文乱码的解决方案
  • 深度和法线纹理
  • 监听H5页面在微信浏览器异常退出
  • Linux 串口编程
  • Adminer源码编译 精简语言中英文和基本使用方法
  • go 中线程安全map
  • eslint 安装与使用-基础教程
  • 自然语言处理的未来愿景
  • 等保2.0三级测评华为华三交换机路由器
  • BA和CS算法中的Levy飞行策略
  • PHP:实现两张无关联表数据的联合分页处理方案
  • 【单元测试】单元测试介绍
  • PyQt事件机制及其应用
  • 厦门凯酷全科技有限公司抖音电商服务的卓越典范
  • vue3水波柱状图 ,实现
  • 如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制
  • System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本
  • 【机器人】振动分析和控制工具之Bode图
  • 生成:安卓证书uniapp
  • 酒店/电影推荐系统里面如何应用深度学习如CNN?
  • 【CSS in Depth 2 精译_069】11.3 利用 OKLCH 颜色值来处理 CSS 中的颜色问题(上)
  • Redis篇-6--原理篇5--单线程模型
  • Java版-图论-最小生成树-Prim算法
  • Python 基础学习(一)
  • vue2使用rtsp视频流接入海康威视摄像头(纯前端)