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

news2024/11/14 12:20:47

前言

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

虽然大部分时候,由脚手架自带的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.coloradmin.cn/o/1957439.html

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

相关文章

<数据集>手机识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:16172张 标注数量(xml文件个数):16172 标注数量(txt文件个数):16172 标注类别数:1 标注类别名称:[Phone] 使用标注工具:labelImg 标注规则:…

【QT】qt 文件操作

qt 文件 qt 文件1. Qt 文件概述2. 输入输出设备类3. 文件读写类4. 文件和目录信息类 qt 文件 1. Qt 文件概述 文件操作是应用程序必不可少的部分。Qt 作为⼀个通用开发库,提供了跨平台的文件操作能力。 Qt 提供了很多关于文件的类,通过这些类能够对文件…

上海有机所化学数据库:一站式科研资源

上海有机化学研究所是中国科学院上海分院的直属机构,主要从事有机化学、材料化学、生命科学等领域的基础研究和应用研究,化学专业数据库是该所承担建设的综合科技信息数据库的重要组成部分,服务于化学化工研究和开发的综合性信息系统&#xf…

Javaweb项目|springboot医院管理系统

收藏点赞不迷路 关注作者有好处 文末获取源码 一、系统展示 二、万字文档展示 基于springboot医院管理系统 开发语言:Java 数据库:MySQL 技术:SpringSpringMVCMyBatisVue 工具:IDEA/Ecilpse、Navicat、Maven 编号:…

【海贼王航海日志:前端技术探索】HTML你学会了吗?(一)

目录 1 -> HTML概念 2 -> HTML结构 2.1 -> 认识HTML标签 2.2 -> HTML文件基本结构 2.3 -> 标签层次结构 3 -> 快速生成代码框架 4 -> HTML常见标签 4.1 -> 注释标签 4.2 -> 标题标签 4.3 -> 段落标签 4.4 -> 换行标签 4.5 ->…

多线程-进阶2

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 1.CAS 1.1CAS全称:Compare and swap 比较内存和cpu寄存器中的内容,如果发现相同,就进行交换(交换的是内存和另一个寄存器的内容) 一个内存的…

《学会 SpringBoot · 参数校验》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

连锁美业门店收银系统Java源码-如何设置门店仓库自提时间?博弈美业实操

1. 门店仓库自提时间,是当客户在小程序上购买实物商品时,预约上门提货的时间 2. 门店仓库自提时间,需要由各门店(店主、店长、店员)在PAD上进行设置 ▶ 操作路径: • 第一步: 进入【我的】页…

怎么进行图片压缩?对图片文件的大小进行压缩的四个方法介绍

怎么进行图片压缩?图片压缩是一种常见的技术,用于减小图像文件的大小,同时尽可能地保持图像的视觉质量和细节。这一过程不仅适用于个人用户想要节省存储空间或提高网页加载速度,也对于专业摄影师、网站设计师和应用程序开发者来说…

【OceanBase诊断调优】—— clog盘满问题排查

背景 日志盘,即clog盘,是oceanbase中用于记录事务日志信息。在日常运行中其存储量会随着事务处理情况不断变化。在一些特殊场景下会出现clog盘占用量超过阈值的情况。4.x架构下的clog盘,日志盘进行了租户级拆分,意味着无法再以3.…

Redis缓存数据库进阶——Redis缓存数据同步问题(8)

Redis缓存使用问题 数据一致性 只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在数据同步的问题。 我以 Tomcat 向 MySQL 中写入和删改数据为例,来给你解释一下,数据的增删改操作具体是如何进行的。 我…

Java中的集合相关知识汇总

总结 Java集合 从数据结构可以分为:数组、Set、Map、队列、栈;从多线程安全可以分为线程安全与非线程安全的集合从关联关系可以总结如下(不包含多线程安全类): 点线框表示接口; 折线框表示抽象类; 实线框表示实现类…

动态代理IP VS 静态代理IP,分别适合什么业务场景?

随着全球化进程的加深,使用IP代理服务的用户与日俱增。本文以“动态IP代理与静态IP代理”为探讨话题,对它们之间的区别、特点与应用场景作深度的对比分析。 一、含义上的区别 动态IP代理:互联网服务提供商(ISP)向用户…

Pytorch中reshape,view,transpose以及permute的详细原理及应用

在深度学习中,我们经常会遇到需要对张量进行形状变换的情况。PyTorch 提供了多种方法来改变张量的形状,包括 reshape, view, transpose和permute 。本文总结了其它博客的精华,详细介绍这些方法的原理和应用场景。 目录 一、张量的存储方式 …

使用 Elasticsearch 和 LlamaIndex 保护 RAG 中的敏感信息和 PII 信息

作者:来自 Elastic Srikanth Manvi 在这篇文章中,我们将研究在 RAG(检索增强生成)流程中使用公共 LLMs 时保护个人身份信息 (personal identifiable information - PII) 和敏感数据的方法。我们将探索使用开源库和正则表达式屏蔽 …

探索 Redis 不同集群架构的性能与应用

1. 引言 Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构,并重点分析哨兵模式和Redis Cluster架构和优势。 2. Redis的四种集群架构 2.1 单实例Redis 使用单个 Redis 实例提供服务。适用于小规模应用&#…

C语言 #具有展开功能的排雷游戏

文章目录 前言 一、整个排雷游戏的思维梳理 二、整体代码分布布局 三、游戏主体逻辑实现--test.c 四、整个游戏头文件的引用以及函数的声明-- game.h 五、游戏功能的具体实现 -- game.c 六、老六版本 总结 前言 路漫漫其修远兮,吾将上下而求索。 一、整个排…

WEB前端开发中如何实现大文件上传?

大文件上传是个非常普遍的场景,在面试中也会经常被问到,大文件上传的实现思路和流程。在日常开发中,无论是云存储、视频分享平台还是企业级应用,大文件上传都是用户与服务器之间交互的重要环节。随着现代网络应用的日益复杂化&…

实况照片怎么转换成gif动图?分享5种方法!

在当今这个视觉为王的时代,静态的照片已经难以满足我们追求生动、有趣的表达需求。你是否也曾想过,将那些精彩瞬间的实况照片转换成动感十足的GIF动图,为社交分享增添一抹亮色?今天,就让我们一起来探索实况照片转换成G…

自闭症怎么才能摘帽?

作为星贝育园自闭症康复中心的老师,经常会有家长满怀期待又焦虑地问我:“自闭症怎么才能摘帽?”今天,我就来为大家详细说一说。 首先,我们要明确,自闭症的“摘帽”并非一蹴而就,而是一个…