基于VUE3+VITE+SpringBoot+Nginx部署项目之跨域配置等问题

前言:遇到问题,解决问题。

第一部分:VUE 配置

1、vite.config.js 文件

server: {proxy: {'/api': {target: env.VITE_BASE_URL,changeOrigin: true,secure: false,rewrite: path => path.replace(/^\/api/, '')}}},

2、.env 文件

VITE_BASE_URL = 'https://api.xxx.cn'

3、axios 文件

const instance = axios.create({baseURL: '/api',timeout: 10000,
});

4、某接口文件

 const login = async (params) => {return requestInstancePostFormData('/user/login', params);};
二、Spring Boot 配置

1、某接口文件

@CrossOrigin
@RestController
@RequestMapping("/user")
@Api(tags = "User API")
public class UserController {......
}

2、文件配置

 String[] apiExcludes = new String[]{"/user/login",};registration.excludePathPatterns(apiExcludes);
三、Nginx 配置
root /www/wwwroot/www.xxx.cn/dist;#Nginx 配置可以确保 Vue Router 正常工作location / {try_files $uri $uri/ @router;index index.html;}location @router {rewrite ^.*$ /index.html last;}#反向代理配置,确保后面有/location /api {proxy_pass https://api.xxx.cn/;}

至此,基本完成,不过有个特别地方,请注意:登录时会报401,如下图:

解决如下图:

两者区别分析(以下分析来自chatGPT):

在 Nginx 的配置中,proxy_pass 指令用于指定反向代理的目标服务器:

  1. proxy_pass https://api.xxx.cn;

    • 这种写法没有在结尾处加斜杠 (/)。
    • Nginx 将会把匹配到的请求路径直接拼接在 https://api.xxx.cn 后面。例如,如果请求的路径是 /api/user/login,Nginx 将会将它转发到 https://api.xxx.cn/api/user/login
  2. proxy_pass https://api.xxx.cn/;

    • 这种写法在结尾处加了斜杠 (/)。
    • Nginx 将会忽略掉请求路径中匹配的 location 配置部分,仅将域名后面的路径直接替换成请求路径。例如,如果请求的路径是 /api/user/login,Nginx 将会将它转发到 https://api.xxx.cn/user/login,即忽略了 location 中定义的 /api 部分。

总结区别:

  • 无斜杠 (proxy_pass https://api.xxx.cn;):保留匹配到的 location 中的路径部分,并将其附加在代理目标的URL后面。
  • 有斜杠 (proxy_pass https://api.xxx.cn/;):忽略匹配到的 location 中的路径部分,直接将请求路径附加在代理目标的URL后面。

至此,结文。

鸣谢:chatGPT 陪伴产品开发的每一天。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password

为了让spring admin 能正确获取到 spring config的actuator的信息,在eureka的metadata中添加了metadata.user.user metadata.user.password eureka.instance.metadata-map.user.name${spring.security.user.name} eureka.instance.metadata-map.user.password${spr…

气象相关图表制作-字体图标、图片、折线的堆叠

开发工作中有个需要展示气温(折线)、天气(图片)、风羽(字体图标)的图表展示需求,之前用过highcharts的关于类似的chart,里面的风雨用的是自带的图片,但是现在要求风羽需要…

Windows环境本地部署开源在线演示文稿应用PPTist并实现远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux双网卡默认路由的metric设置不正确,导致SSH连接失败问题定位

测试环境 VMware虚拟机 RockyLinux 9 x86_64 双网卡:eth0(访问外网): 10.206.216.92/24; eth1(访问内网) 192.168.1.4/24 问题描述 虚拟机重启后,SSH连接失败,提示"Connection time out",重启之前SSH连接还是正常的…

基于Spring Boot医护人员排班系统

设计技术: 开发语言:Java数据库:MySQL技术:SpringbootMybatisvue 工具:IDEA、Maven、Navicat 主要功能: 医护类型管理 医护人员排班系统的系统管理员可以对医护类型添加修改删除以及查询操作。具体界面…

SS8870T-3.6A 扫地机和滚刷电机的大电流电机驱动

扫地机器人已经成为现代家庭清洁的必备工具,而其中的关键部件——电机,对于其性能和用户体验起着至关重要的作用。为了确保扫地机器人的高效清洁和稳定运行,至少需要使用7个直流电机,包括行走轮、滚轮、边刷和吸尘等功能的驱动。 …

Python接口测试课程,每天学会一个Python小知识!

第一天: Python基础 Python简介、环境搭建及包管理 Python简介: 特点:Python是一门动态、解释型、强类型语言 动态:在运行期间才做数据检查(不用提前声明变量)- 静态语音(C/Java):编译时检查数据类型&…

根据指定日期自定义el-date-picker日期选择器样式

需求 功能需要在DatePicker日期选择器中,对有数据的日期下方添加小圆点提示样式,后台会返回按年份查询的日期数据 dayjs插件 dayjs中文网:https://dayjs.fenxianglu.cn/ npm install dayjs实现点 配置picker-options对象中的cellClassName属性…

django 逆向生成对应数据库表的models模型类 —— python

一,在setting.py中配置好连接数据库的参数 在setting中的DATABASESZ中配置默认参数,并在INSTALLED_APPS中导入模块名。 DATABASES {default:{ENGINE: django.db.backends.mysql, # 数据库引擎NAME: jljupcs, # 数据库名称HOST: 127.0.0.1, # 数据库…

检索增强生成RAG系列1--RAG的实现

大模型出现涌现能力之后,针对大模型的应用也如雨后春笋般。但是,在大模型真正落地之前,其实还需要做好最后一公里,而这个最后一公里,其中不同应用有着不同的方法。其中prompt、微调和RAG都是其中方法之一。本系列就是针…

简单的同步压缩变换脊线检测(PythonMATLAB)

由于 Heisenberg 测不准原理,线性时频变换方法无法同时在时间和频率方向达到最佳的时频分布,窗函数和小波函数的选择也降低了各方法的自适应性。同样,二次型变换方法难以在去除交叉干扰项的同时保证较高的能量集中度。为了解决该问题&#xf…

MySQL的安装与配置

MySQL提供安装包和压缩包两种安装方式,安装包是以.msi作为后缀名的二进制分发文件,压缩包是以.zip为后缀的压缩文件。安装包的安装只要双击安装文件,然后按照提示一步步安装就可以了,属于“傻瓜”式安装;压缩包的安装需…

基于SpringBoot校园一卡通系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 Java精品实战案例《600套》 2023-2025年最值得选择的Java毕业设计选题大全&#xff1…

World of Warcraft [CLASSIC] Level 70 Riding Skill

World of Warcraft http://account.battlenet.com.cn-CSDN博客 World of Warcraft [CLASSIC] Level 70 Riding Skill 魔兽世界【怀旧】70级骑术 部落如何学习70级骑术,如何区影月谷,影月村,怀旧一下 荆棘谷 暮色森林 逆风小径 悲伤沼泽 诅…

变工况下转子、轴承数据采集及测试

1.固定工况下的数据采集 1.wireshark抓包 通过使用 Wireshark 抓包和 Linux 端口重放技术,可以模拟实际机械设备的运行环境,从而减少实地验证软件和算法的复杂性和麻烦。 打开设备正常运转,当采集器通过网口将数据发送到电脑时&#xff0c…

ubuntu 编译交叉环境arm 版本的openssl库

一,下载源码 [ Old Releases ] - /source/old/index.html 二,设置交叉编译环境 我的交叉环境是RV1126开发板,/home/rpdzkj/development/cross-compile-tools/rv1126/ 对应的是我电脑里的RV1126开发板的交叉环境下的gc g等路径存放 设置环境…

5. zabbix分布式监控

zabbix分布式监控 一、zabbix分布式监控二、zabbix分布式监控部署1、环境描述2、zabbix proxy的部署2.1 安装zabbix proxy相关的软件2.2 创建proxy需要的库、导入表2.3 编辑zabbix proxy配置文件,指定数据库连接2.4 启动zabbix proxy 3、在zabbix server添加代理4、…

数据结构与算法基础(王卓)--学习笔记

1 数据结构分类 1.1 逻辑结构分类 集合结构线性结构:线性表、栈、队列、串树形结构图形结构 1.2 物理结构分类 逻辑结构在计算机中的真正表示方式(又称为映射)称为物理结构,也可叫做存储结构 顺序存储结构:数组链…

高德地图获取key值步骤

1、创建新应用 进入控制台(https://lbs.amap.com/dev/),创建一个新应用。 如果您之前已经创建过应用,可直接跳过这个步骤。 2、添加新Key 在创建的应用上分别填写key名称、选择服务平台、SHA1、以及PackageName SHA1:是在安卓…

【项目实训】解决前后端跨域问题

由于前端框架使用vue,后端使用flask,因此需要解决前后端通信问题 在vue.config.js中修改 module.exports defineConfig({transpileDependencies: true,lintOnSave:false, }) // 跨域配置 module.exports {devServer: { //记住&#x…