使用nginx解决本地环境访问线上接口跨域问题

前言

前端项目开发过程中,经常会遇到各种各样的跨域问题。

虽然大部分时候,由脚手架自带的proxy功能即可解决问题,如webpack,vite等;但是若没有通过脚手架搭建项目,或者必须使用某些特殊规则转发时,使用nginx则能够轻松解决问题。

1、场景描述

例如,这里我们有一个前端H5项目,项目服务器启动地址为A:http://localhost:7456,访问的接口服务器主机地址为B:https://test.online.cn/suffix/apipath

由于协议不同,域名不同,端口也不同,所以一定会提示跨域。

等我绘制一下草图:

2、Nginx代理解决方案原理:

跨域产生的原因就是不满足同源协议策略类,当协议,域名,端口任意一个不同,就会导致跨域,如上例中的A到B

如果此时用增加一个nginx代理服务器C,那么流程将变成:

C代理A,C也代理B,A到B的访问过程实际上就成了C访问C。

那么就一定满足同源协议策略类,就一定不会跨域了。

容我再画一下草图:

3、具体配置代码:

找到nginx.exe所在位置的conf文件夹下的nginx.conf,然后找到 http项下的server项,添加如下代码:

    server {

        # 监听的是ng服务器的地址和端口。这里配的是前端项目需要打开的地址和端口

        listen       5000;

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # 代理的前端服务地址

        location / {

            # 这里是代理前端项目的配置,下面的地址是你前端项目启动时的地址和端口

            proxy_pass http://localhost:7456/;

        }

        # 这里才是代理的接口服务,prefix 为请求接口的前缀,如 https://baidu.com/suffix/apipath

        location /cmpm/ {

            # 定义代理目标

            proxy_pass https://xiaoneng.vpclub.cn/cmpm/;

        }

    }

如下图所示:

配置好之后,双击nginx.exe,启动nginx服务器。启动成功后,在任务管理器内能看到已启动的进程:

4、代码解释:

        # 监听的是ng服务器的地址和端口。这里配的是前端项目需要打开的地址和端口

        listen       5000;

        server_name  localhost;

这一块是配置的nginx服务启动的服务名称和端口,即地址C

        # 代理的前端服务地址

        location / {

            # 这里是代理前端项目的配置,下面的地址是你前端项目启动时的地址和端口

            proxy_pass http://localhost:7456/;

        }

这一块配置的是nginx代理的前端服务器的地址,即本来我们应该访问的前端服务器地址A

        # 这里才是代理的接口服务,prefix 为请求接口的前缀,如 https://baidu.com/suffix/apipath

        location /suffix/ {

            # 定义代理目标

            proxy_pass https://test.online.cn/suffix/;

        }

这一块是配置的代理接口地址,suffix 可以是接口地址中含有的一段,proxy_pass 设置的是需要代理的线上接口地址B

如项目中请求的地址为http://localhost:5000/suffix/apipath

Nginx根据suffix匹配成功,经过代理后实际访问的接口地址为:https://test.online.cn/suffix/apipath

5、前端请求接口地址修改:

需要注意的是,在1场景描述中的前端项目,直接访问的是线上地址B,而我们使用nginx代理后,应该访问nginx服务器所在的地址C

6、启动前端服务器,访问nginx服务器

最后,我们一定要记得启动前端项目服务器A,否则一个未启动的服务,nginx服务器启动了也无法进行代理。

访问的时候,直接访问nginx服务器所在的地址C即可。

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

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

相关文章

了解光耦合器从基础到应用

光耦合器也称为光电耦合器,是一种利用光信号传递电信号的电子元器件。它广泛应用于各种电子设备和电路中,因其在隔离电气信号、提高抗干扰能力方面的独特优势,备受工程师们的青睐。本文将为光耦爱好者和高级工程师提供一份有关光耦合器的知识…

解锁人工智能学习中的数学密钥

一、启航:奠定数学基础 1. 线性代数:AI的入门语言 学习目标:掌握向量、矩阵的基本概念及运算,理解线性空间、线性变换及特征值、特征向量的意义。学习建议:从基础教材入手,如《线性代数及其应用》&#x…

企业级视频拍摄与编辑SDK的全面解决方案

视频已成为企业传播信息、展示品牌、连接用户的重要桥梁,如何高效、专业地制作高质量视频内容,成为众多企业面临的共同挑战。美摄科技,作为视音频技术领域的创新先锋,以其强大的视频拍摄与编辑SDK,为企业量身打造了一站…

Sip for Mac:强大的屏幕取色软件

Sip for Mac是一款功能强大的屏幕取色工具软件,专为设计师、开发者和创作者打造。这款软件以其精准的取色功能和丰富的颜色管理选项而备受好评。 Sip的核心功能是提供多种取色工具,包括拾色器、取色板和屏幕取色等,使用户能够轻松地从屏幕上…

分享几种电商平台商品数据的批量自动抓取方式

在当今数字化时代,电商平台作为商品交易的重要渠道,其数据对于商家、市场分析师及数据科学家来说具有极高的价值。批量自动抓取电商平台商品数据成为提升业务效率、优化市场策略的重要手段。本文将详细介绍几种主流的电商平台商品数据批量自动抓取方式&a…

带哨兵位的双向循环链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 带哨兵位的双向循环链表 一、双向循环链表二、带哨兵位的的双向循环链表结构?2 双向循环链表接口函数的实现2.1 用于调试打印链表的接口函数2.2 双向循环链表的初…

【C++指南】类和对象(下)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注

探索贝塞尔曲线:计算机图形学中的关键技术

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 贝塞尔曲线是计算机图形学和设计领域中的重要工具。它们由皮埃尔贝塞…

Linux 查找命令

目录 1. 查看二进制文件 which 2. 查看指定文件 find ​2.1 文件名查找 2.2 文件大小查找 前面学习过的 Linux 命令,其实质是一个个的二进制可执行程序,与 Windows 系统中的 .exe 文件是一个意思。 1. 查看二进制文件 which 语法: w…

Origin制作线性拟合回归图

选中数据,点下方散点图 调整散点颜色 在分析中打开线性拟合回归 添加文本 显示上轴

【NPU 系列专栏 1.1 -- NPU TOPS 算力的计算方式】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NPU 算力MAC 阵列简介MAC 阵列特点 MAC 阵列的结构MAC 阵列架构示例 MAC 阵列计算举例示例计算 TOPS 计算方法 NPU 算力 OpenCV 算法会消耗很大一部分自动驾驶芯片的算力,在车上堆摄像头的同时也需要堆TOPS&#xf…

卷积神经网络(二)-AlexNet

前言: AlexNet是2012年ImageNet竞赛冠军(以领先第二名10%的准确率夺得冠军)获得者Hinton和他的学生Alex Krizhevsky设计的,在ILSVRC-2010测试集上取得了top-1错误率37.5%,top-5错误率17.0%(优于第二名的16.4%),明显优…

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言,其特性包括:模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法,以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…

LeetCode 637, 67, 399

文章目录 637. 二叉树的层平均值题目链接标签思路代码 67. 二进制求和题目链接标签思路代码 399. 除法求值题目链接标签思路导入value 属性find() 方法union() 方法query() 方法 代码 637. 二叉树的层平均值 题目链接 637. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

四、GD32 MCU 常见外设介绍(9)9.FWDG 模块介绍

9.1.FWDG 简介 本章我们主要分析独立看门狗(FWDG)的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即FWDGTRSTF。如果…

基于深度学习算法,支持再学习功能,不断提升系统精准度的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过计算机视觉和…

Java基础巩固——JDK 8、9新增接口的特性(接口中定义非抽象方法、静态方法和私有方法)

#Java学了这么久,项目也做了?基础知识还不巩固?快来关注我的这篇系列博客——Java基础复习巩固吧# 目录 引言 一、JDK8新特性:允许在接口中定义非抽象方法和静态方法。 注意事项 二、JDK9新特性:允许在接口中定义p…

ScriptableObject使用

资料 Scripting/Create modular game architecture in Unity with ScriptableObjects 脚本文档 基础 SO是一个Unity对象,继承UnityEngine.Objec, SO最大的特点是实例文件可共享,有点类似静态数据,同一个实例文件可被多个对象引…

matlab实验:实验六MATLAB 数值计算与符号运算

题目1:(线性方程组数值求解) 1. 用不同的方法求解下面方程:(方程原式参考 P369 实验 10,第 1 题) 第 1 种,左除和求逆函数(inv) 第 2 种 , 用 符 号 运 算 的…