nginx优雅如何优雅的接管【跨域配置】

跨域问题太常见了,这里不做详细赘述。文章主要想说一下,如何统一管理和更好的来管理  跨域配置

跨域的常见配置有两种 后台代码设置网关设置

1、后台代码设置  以springboot为例代码如下(水一下文章长度...)


@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {private static final Logger logger = LoggerFactory.getLogger(WebMvcConfiguration.class);@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {//setUseSuffixPatternMatch 后缀模式匹配configurer.setUseSuffixPatternMatch(true);//setUseTrailingSlashMatch 自动后缀路径模式匹配configurer.setUseTrailingSlashMatch(true);}@Beanpublic CorsFilter corsFilter() {logger.info("---------------corsFilter--------------------");final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();final CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.setAllowCredentials(true);corsConfiguration.addAllowedOrigin("*");corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);return new CorsFilter(urlBasedCorsConfigurationSource);}/*** 设置跨域访问** @param registry*/@Overridepublic void addCorsMappings(CorsRegistry registry) {logger.info("---------------WebMvcConfigurer--------------------");registry.addMapping("/**").allowedHeaders("*").allowedOrigins("*").allowedMethods("*").allowCredentials(true);}}

2、网关设置-以nginx配置为例

add_header 'Access-Control-Allow-Origin' "*";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' '*';

栗子举完了,这里说下如有优雅起来 ~

以上代码现有问题:

1、跨域处理全部都开放的话,会有资源安全问题,很有可能会被盗用

2、管理项目比较多的话,如果代码设置了跨域处理。nginx又add_header一下会有报错的

The ‘Access-Control-Allow-Origin’ header contains multiple values ‘http://xxx.xxx.xx, *’, but only one is allowed.

已被CORS策略阻止:对预请求的响应未通过访问控制检查:“access control Allow Origin”标头包含多个值’‘http://xxx.xxx.xx,,*',但只允许使用一个。(这个属性不能有多个、也不能为空)

现在说一下目前认为比较合理的方案,用nginx全面接管跨域设置,覆盖代码跨域设定。添加origin域名校验

覆盖跨域处理,这里推荐用 “proxy_hide_header ”,也就是先隐藏 再添加,这样就不会出现多条header属性的问题了(也可以用more_set_headers模块来处理,但是完全没必要引入新module...)

nginx跨域代码如下

     #隐藏后端服务响应中的 Access-Control-Allow-Origin 标头proxy_hide_header 'Access-Control-Allow-Origin';proxy_hide_header 'Access-Control-Allow-Credentials';proxy_hide_header 'Access-Control-Allow-Methods';proxy_hide_header 'Access-Control-Allow-Headers';#通过$http_origin来判断域名是否允许访问set $cors "";if ($http_origin ~* '(test.com|test.cn)'){set $cors "true";}if ($cors = 'true'){add_header 'Access-Control-Allow-Origin' "$http_origin";add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';add_header 'Access-Control-Allow-Headers' '*';}

这个思路应该是比较适用大多数的处理,那就按这个思路 让配置更优雅一些 ~

将上述代码放入到cors.txt中

nginx配置中,哪里需要跨域处理就 include一下就可以。这样也可以统一管理安全域名

  location /test {#引入跨域设置include /usr/local/nginx/conf/vhost/cors.txt;proxy_pass http://172.16.x.xx:8080;}

以上就是基本优化思路,简单实用 ~

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

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

相关文章

洛谷 P2935 [USACO09JAN] Best Spot S

文章目录 [USACO09JAN] 最佳牧场 S题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 思路解析CODE [USACO09JAN] 最佳牧场 S 题目链接:https://www.luogu.com.cn/problem/P2935 题目描述 贝茜,总是希望优化她的生活,她发现自己…

Linux下activemq的安装与安装成功确认

一、下载 apache-activemq-5.14.0-bin.tar.gz 二、安装 将压缩包拷入linux内,进行解压tar -zxvf apache-activemq-5.14.0-bin.tar.gz,与redis、nginx不同的是,active解压不需要安装就可以直接启动! 启动命令:./bin…

1949-2021年全国31省公路里程数据

1949-2021年全国31省公路里程数据 1、指标:公路里程 2、范围:包括31省 1978-2021年期间无缺失 3、来源:各省NJ、产业NJ、各省统计GB 4、指标解释:公路里程指报告期末公路的实际长度。 统计范围:包括城间、城乡间、乡…

Rocketmq架构

NameServer:作为注册中心,提供路由注册、路由踢出、路由发现功能,舍弃强一致,保证高可用,集群中各个节点不会实时通讯,其中一个节点下线之后,会提供另外一个节点保证路由功能。 Rocket mq name…

java学习part32StringBuffer和StringBuilder

Java中的值传递和引用传递(详解) - 知乎 (zhihu.com) 146-常用类与基础API-StringBuffer与StringBuilder的源码分析、常用方法_哔哩哔哩_bilibili 1. 2.扩容机制 不够用:长度为 原长度*22;如果还不够,那么就扩容到目…

软件工程期末复习(2)

学习资料 设计模式与软件体系结构【期末全整理答案】_软件设计模式与体系结构期末考试题_鸽子不二的博客-CSDN博客 软件设计与体系结构(第二版)部分习题_软件设计与体系结构第二版课后答案-CSDN博客 软件体系结构试题库试题和答案 - 豆丁网Docin 软件设计与体系结构复习 - CN…

当springsecurity出现SerializationException问题

当springsecurity出现SerializationException问题 01 异常发生场景 当我使用springsecurity时,登录成功后携带token访问接口出了问题 org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized field "userna…

多文件夹图片预处理:清除空值、重置大小、分割训练集

→ 清理空值 防止出现cannot identify image file 参考Python数据清洗----删除读取失败图片__简单版_python用pil读取图片出错删除掉-CSDN博客 #%pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python #可能需要重启jupyter import os import shutil imp…

【Unity动画】状态机添加参数控制动画切换(Animator Controller)

Unity - 手册:动画参数 在Unity中,动画状态的切换是通过Animator Controller中的过渡(Transition)来实现的。过渡是状态之间的连接,控制过渡一般都是靠调用代码参数 我们来实现一个案例: 创建动画状态机&a…

构造函数的定义

当定义一个构造函数时,它的格式如下: ClassName(parameters) : member1(initializer), member2(initializer), ... {// 构造函数的主体 }其中: ClassName 是结构体或类的名称,表示构造函数所属的结构体或类。parameters 是构造函…

leetcode 142.环形链表2

我来更新 leetcode 题目了,接着上一次,这一次是上一道题目的提升(有点数学题的感觉) 142.环形链表2 题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表…

识KDJ指标,看懂超买超卖信号

一、认识KDJ 1、KDJ的含义 KDJ分析股票中短期趋势的一个常用指标,中文名称“随机指标”。它是一个综合考虑股票最高价、最低价和收盘价的技术指标,能够帮助我们根据历史价格预测出股票未来的价格走势。在实际应用的过程中,它的短期预测功能要…

JAVA毕业设计113—基于Java+Springboot+Vue的体育馆预约系统(源代码+数据库+12000字论文)

基于JavaSpringbootVue的体育馆预约系统(源代码数据库12000字论文)113 一、系统介绍 本项目前后端分离,本系统分为管理员、用户两种角色 用户角色包含以下功能: 注册、登录、场地(查看/预订/收藏/退订)、在线论坛、公告查看、我的预订管理、我的收藏…

TimeGPT:时间序列预测模型实例

时间序列预测领域正在经历一个非常激动人心的时期。在过去的三年里,我们见证了许多重要的贡献,如N-BEATS、N-HiTS、PatchTST和TimesNet等。同时,大型语言模型(LLM)近来在流行度方面取得了很大的成功,例如Ch…

PMP-01

考纲 需要看的书籍 学习计划

04-数据库操作对象Statement对象和PreparedStatement对象的区别,SQL注入的优缺点

Statement对象和查询结果集 Statement对象相关的方法 Connection接口中获取数据库操作对象Statement对象的方法 方法名功能Statement createStatement()创建Statement对象 Statement对象执行增删改查的SQL语句(不含占位符"?")的方法,JDBC中的SQL语句不需要提供分…

Verilog 入门(八)(验证)

文章目录 编写测试验证程序波形产生值序列重复模式 测试验证程序实例从文本文件中读取向量实例:时序检测器 测试验证程序用于测试和验证设计方法的正确性。Verilog 提供强有力的结构来说明测试验证程序。 编写测试验证程序 测试验证程序有三个主要目的:…

minigpt4安装的一系列问题

问题一 合并权重: python -m fastchat.model.apply_delta --base /data/qq/llama2-7b-chat-hf --target /data/qq/MiniGPT-4/vicuna_weights/ --delta /data/qq/vicuna-7b-delta-v0fastchat版本与模型版本 不兼容 解决方法: 第一种:用低版…

程序的未定义行为(Undefined Behavior)

未定义行为(Undefined Behavior,简称UB)是编程中一个重要而复杂的概念,尤其在像C和C这样的低级语言中更为常见。下面是对未定义行为的详细介绍: 定义 未定义行为指的是程序中的某些操作,其效果没有在编程…

【算法】滑动窗口题单——5.多指针滑动窗口醒醒⭐

文章目录 930. 和相同的二元子数组解法1——前缀和 哈希表解法2——滑动窗口 ⭐ 1248. 统计「优美子数组」1712. 将数组分成三个子数组的方案数⭐⭐⭐2444. 统计定界子数组的数目解法——多指针滑动窗口代码2——简洁写法:一次遍历O(1) 空间🐂⭐ 992. K…