前端添加代理通过nginx进行转发解决跨域

news2024/11/24 16:19:22

记录在项目中遇到跨域并进行解决的方案

解决方案

  • 记录在项目中遇到跨域并进行解决的方案
  • 前端代理部分
  • nginx转发
  • 配置origin限制,修复CORS跨域漏洞

前端代理部分

代理后页面请求地址截图:
在这里插入图片描述
这里地址栏的地址是:http://127.0.0.1:13908
调用登录接口请求地址是:http://127.0.0.1:13908/api/sys/login
后端网关的端口不是13908,是13909,且没有api,这里是前端加了代理

nginx转发

nginx配置如下,监听前端访问的端口,并且拦截并转发到我们需要的地址。

	server {
		listen       13908;        
		server_name  localhost;
		
		location / { 
 			root   /home/cdszwy/phase2Test/web/html;
            index  index.html;
            try_files $uri $uri/ /index.html;	
		}
		
		#/api  会拼在url后面( http://127.0.0.1:13909/api/sys/login) ,/api/  不会拼在url后面( http://127.0.0.1:13909/sys/login)
		#拦截 端口 + /api, 然后做转发
		#遇到/api的请求 nginx 转发到某某 服务器ip端口
		#13908 是你前端的地址  好或者前端请求的端口
		location /api/ {
			proxy_pass   http://127.0.0.1:13909/;
		}

配置origin限制,修复CORS跨域漏洞

第一种:

	
	map $http_origin $allow_cros {
		default 1;
		#这里的ip或者域名是你自己服务的,也就是你允许访问的地址进行匹配,可以添加多个,外部地址匹配不上将不允许访问
		"~^(http://127.0.0.1:13908)$" 1;
		"~*" 0;
	}
	server {
		listen       13908;        
		server_name  localhost;
		
		#验证origin是否匹配,不匹配则返回403,不允许访问
		if ($allow_cros = 0){
	     		return 403;
		}
		
		location / { 
 			root   /home/cdszwy/phase2Test/web/html;
            index  index.html;
            try_files $uri $uri/ /index.html;	
		}
		
		#/api  会拼在url后面( http://127.0.0.1:13909/api/sys/login) ,/api/  不会拼在url后面( http://127.0.0.1:13909/sys/login)
		#拦截 端口 + /api, 然后做转发
		#遇到/api的请求 nginx 转发到某某 服务器ip端口
		#13908 是你前端的地址  好或者前端请求的端口
		location /api/ {
			proxy_pass   http://127.0.0.1:13909/;
		}

第二种配置:

	server {
		listen       13908;        
		server_name  localhost;
		
		location / { 
 			root   /home/cdszwy/phase2Test/web/html;
            index  index.html;
            try_files $uri $uri/ /index.html;	
		}
		
		#/api  会拼在url后面( http://127.0.0.1:13909/api/sys/login) ,/api/  不会拼在url后面( http://127.0.0.1:13909/sys/login)
		#拦截 端口 + /api, 然后做转发
		#遇到/api的请求 nginx 转发到某某 服务器ip端口
		#13908 是你前端的地址  好或者前端请求的端口
		location /api/ {
			set $allow_cors 0;
			# 判断不为空
			if ($http_origin) {
				set $allow_cors 1;
			}
			# 判断不在白名单内
			if ($http_origin !~* "(127.0.0.1)" ) {
				set $allow_cors "${allow_cors}1";
			}
			# 判断不为空 且 不在白名单内,返回403
			if ($allow_cors = "11") {
				return 403;
			}
			add_header 'Access-Control-Allow-Origin' $allow_cors always;
			add_header 'Access-Control-Allow-Credentials' 'false'  always;

			proxy_pass   http://127.0.0.1:13909/;
			access_log   /usr/local/nginx/log/uat-mobileapi-access.log;
			error_log    /usr/local/nginx/log/uat-mobileapi-error.log;
		}

以上两种测试后都能满足该场景,但是设置:add_header ‘Access-Control-Allow-Origin’ $allow_cors always;并未生效,都是通过匹配原则进行判断来做的返回退出,后面有时间再进行验证 add_header的方式

有什么更好的欢迎留在评论区。

参考文章:
https://blog.csdn.net/qq_20236937/article/details/128640137
https://blog.csdn.net/qq_33204709/article/details/129232198
https://blog.csdn.net/zxd1435513775/article/details/102508463

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

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

相关文章

OrCAD Capture 元件位号Part Reference有下划线

原因: 提示用户曾经修改过原理图封装。 现象: USB20_12 解决办法: 对着元器件右键>User Assigned Reference > Uset,即可消除下划线。 修改后:

通过域名的方式访问服务器里的资源

大家好,我是雄雄。欢迎关注微信公众号:雄雄的小课堂 前言 在平时的项目过程中,我们可能经常会遇到这样的场景。 上传资源,比如图片或者视频到服务器中,上传上去后,我们给数据库中存的是文件所在路径&…

SSMP整合案例(3) 创建数据层并在测试类中运行数据库增删查改操作

上文 SSMP整合案例(2) Spring Boot整合Lombok简化实体类开发我们已经开发完了实体类 我们就可以做数据层了 目前来讲 数据层技术 使用了最大的自然是 MyBatis 但其实MyBatis-Plus在国内很多中小企业还是使用的挺多的 这次 我们主要是通过MyBatis-Plus和Druid来做这件事情 这两…

5款界面简洁无广告的轻量级小软件

今天的主题是简洁,轻便,都是轻量级的小软件,界面都是非常简洁,而且无广告的。 文件同步——Syncthing Syncthing是一款用于同步和分享文件的工具。它可以让你在不同的设备上同步你的文件夹,并提供多种功能和选项来设…

鱼眼相机成像模型以及基于OpenCV标定鱼眼镜头(C++)

opencv系列 文章目录 opencv系列一、鱼眼镜头模型二、投影函数等距投影模型等立体角投影模型正交投影模型体视投影模型 三、OpenCV中的鱼眼相机模型四、标定(C)实现使用的函数采集标定图像标定代码标定结果 一、鱼眼镜头模型 鱼眼镜头一般是由十几个不同…

新能源充电桩4G无线物联网解决方案|4G路由器ZR2000

日常生活中新能源汽车已随处可见,新能源也逐渐普遍,绿色出行、低碳生活的环保概念也随着科普深入人心,新能源汽车必备的充电桩行业随之崛起,为保证用户体验及运营管理,充电桩需要通过网络实现数据传输、远程监控、位置…

19-递归的理解、场景

一、递归 🌭🌭🌭在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数 核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 一般来说,递归…

Azure-FunctionApp入门实战

介绍 FuntionApp 是微软云推出的一款serverless产品服务,作为coder可以无需关心程序部署所需的infra信息,只需要focus自己的业务代码实现即可 使用场景 是不是所有的业务都可以使用serverless产品呢?理论上是可以的,但是从实际…

初识mysql数据库之mysql数据库安装(centos)

目录 一、卸载不需要的环境 二、安装mysql yum源 三、安装mysql 四、登录mysql 1. 直接登录 2. 设置免密码登录 五、配置my.cnf 六、mysql登录时的一些选项介绍 一、卸载不需要的环境 要注意,在安装mysql数据库时,最好将用户切换为root&#xf…

Maven配置仓库、阿里云镜像、环境变量(史上最全最详细)

Maven配置仓库、阿里云镜像、环境变量(史上最全最详细) 一、前言 为了解决在maven的pom.xml文件中填入了某个依赖以后,maven却一直在转圈,非常慢的情况,我们需要进行配置阿里云镜像,这样会提升开发速度。…

Yolov5/Yolov7优化:引入Soft-NMS,提升密集遮挡场景检测精度

1.Soft-NMS介绍 论文地址:https://arxiv.org/pdf/1704.04503.pdf NMS需要优化的参数: IoU 的阈值是一个可优化的参数,一般范围为0~0.5,可以使用交叉验证来选择最优的参数。 R-CNN会从一张图片中找出n个可能是物体的矩形框,然后为每个矩形框为做类别分类概率: 就…

解密车载SOA架构原理,构建汽车通信的核心技术

车载SOA架构原理 车载SOA架构(Service-Oriented Architecture,面向服务的架构)是一种设计思想,旨在构建可扩展、灵活和可维护的车载系统。以下是车载SOA架构的一些原理和特点: 服务导向:车载SOA架构将车载…

探索ChatGPT:了解语言模型在对话系统中的应用

第一章:引言 在当今数字化时代,人工智能技术的迅猛发展使得对话系统成为一个备受关注的领域。随着语言模型的进步,像ChatGPT这样的模型正在改变我们与计算机进行交流的方式。本文将探索ChatGPT作为一种语言模型在对话系统中的应用&#xff0…

数据结构——顺序表(万字讲解)

单向链表(又名单链表、线性链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过从头部开始,依序往下读取。 //单链表的打印 void SLTPrint(SLTNode* phead) {SLTNode* cur phead;while (cur){pri…

python:使用Scikit-image库对单波段遥感图像做纹理特征提取(texture)

作者:CSDN @ _养乐多_ 本文将介绍使用Scikit-image库对单波段遥感图像做纹理特征提取的代码。包括:计算灰度共生矩阵(greycomatrix),计算局部二值模式(LBP)特征,计算方向梯度直方图(HOG)特征,使用Gabor滤波器提取纹理特征,计算图像纹理能量,在不同尺度上计算图像…

Android问题笔记-集成AndroidUSBCamera开源框架出现 “libjpeg-turbo1500.so“ not found

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

【干货】Android系统定制基础篇:第十五部分(Android支持鼠标右键返回、GPIO 控制方案、属性标识USB摄像头的VID与PID)

1、修改 frameworks/native/services/inputflinger/InputReader.cpp 如下: diff --git a/frameworks/native/services/inputflinger/InputReader.cpp b/frameworks/native/services/inputflinger/Inp index 7207a83..2721800 100755 --- a/frameworks/native/servi…

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

一、图像的梯度 1、简述 图像可以被视为标量场(即二维函数)。 通过微分将标量场转换为矢量场。 梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最…

两轮车造爆款,爱玛的时尚战略胜算几何?

市场越卷,爆款的意义越大。 电动车行业就是这样(本文仅指两轮电动车,如电动自行车、电动摩托车等出行工具),在CR2>45%、CR8>80%的市场格局下,行业竞争早已进入巷战阶段。 对头部的几个品牌&#xf…

leetcode 2090. K Radius Subarray Averages(半径为k的子数组的平均)

k半径长度的子数组表示以数组下标 i 为中心,[i-k, ik]范围内的子数组。 返回和数组nums一样长度的数组res,res[i] [i-k, ik]范围内的元素和 / 元素个数2k1 如果 i-k 或者 ik 超出了数组范围,res[i] -1. 思路: 如果[i - k, ik]…