APISix如何配置gzip压缩、cache、跨域

ops/2024/11/20 20:17:42/

网上查到的apisix的配置很多都很古老,要改配置文件。其实现在apisix都是使用插件方式实现各种配置,很方便。这里简单介绍下三个常用插件、gzip压缩、cache缓存和跨域插件。这里均使用apisix的Dashboard看板进行配置。

gzip压缩

 1. 打开apisix看板,打开插件模块,点击启用按钮。

2. 在其他分类中找到Gzip组件,点击启用。

3. 在右侧弹出出抽屉中进行配置。参考如下:

重点是红框区域,声明了进行gzip压缩的文件类型。

当然,在插件模块中进行配置效果相同。

4. 具体配置参数信息可以查看文档。

{"_meta": {"disable": false},"comp_level": 6,"disable": false,"min_length": 500,"types": ["text/html","application/json","application/javascript","application/xml","text/css","text/javascript"],"vary": true
}

会直接定位官网文档

根据文档说明,可以调整配置。

cache

apisixproxy-cache插件,用来处理页面缓存。

1. 打开apisix控制台,点击插件菜单。点击启用按钮进入插件安装界面。

2. 同样在其他分类中,找到proxy-cache插件,点击启用。

3. 编辑配置项。可以参考如下通用配置。

{"_meta": {"disable": false},"cache_bypass": ["$arg_bypass"],"cache_http_status": [200],"cache_key": ["$uri","-cache-id"],"cache_method": ["GET"],"disable": false,"hide_cache_headers": false,"no_cache": ["$arg_test"]
}

4. 根据文档说明进行相关调整。

补充:一般来说,都是对get请求进行cache。如果不希望cache的接口,请在请求头添加nocache标头,例如验证码。当然,改成post也是一个办法。

跨域实现

apisixcors插件实现跨域。安装方法同上,就不单独说了。

看下配置。

切换成json格式如下:

这里需要注意的点比较多。这里引用下官网说明:

cors

描述apisix.apache.org/zh/docs/apisix/plugins/cors/#%E6%8F%8F%E8%BF%B0" rel="nofollow" title="#">#

cors 插件可以让你轻松地为服务端启用 CORS(Cross-Origin Resource Sharing,跨域资源共享)的返回头。

属性apisix.apache.org/zh/docs/apisix/plugins/cors/#%E5%B1%9E%E6%80%A7" rel="nofollow" title="#">#

名称类型必选项默认值描述
allow_originsstring"*"允许跨域访问的 Origin,格式为 scheme://host:port,示例如 https://somedomain.com:8081。如果你有多个 Origin,请使用 , 分隔。当 allow_credential 为 false 时,可以使用 * 来表示允许所有 Origin 通过。你也可以在启用了 allow_credential 后使用 ** 强制允许所有 Origin 均通过,但请注意这样存在安全隐患。
allow_methodsstring"*"允许跨域访问的 Method,比如:GETPOST 等。如果你有多个 Method,请使用 , 分割。当 allow_credential 为 false 时,可以使用 * 来表示允许所有 Method 通过。你也可以在启用了 allow_credential 后使用 ** 强制允许所有 Method 都通过,但请注意这样存在安全隐患。
allow_headersstring"*"允许跨域访问时请求方携带哪些非 CORS 规范 以外的 Header。如果你有多个 Header,请使用 , 分割。当 allow_credential 为 false 时,可以使用 * 来表示允许所有 Header 通过。你也可以在启用了 allow_credential 后使用 ** 强制允许所有 Header 都通过,但请注意这样存在安全隐患。
expose_headersstring"*"允许跨域访问时响应方携带哪些非 CORS 规范 以外的 Header。如果你有多个 Header,请使用 , 分割。当 allow_credential 为 false 时,可以使用 * 来表示允许任意 Header。你也可以在启用了 allow_credential 后使用 ** 强制允许任意 Header,但请注意这样存在安全隐患。
max_ageinteger5浏览器缓存 CORS 结果的最大时间,单位为秒。在这个时间范围内,浏览器会复用上一次的检查结果,-1 表示不缓存。请注意各个浏览器允许的最大时间不同,详情请参考 Access-Control-Max-Age - MDN。
allow_credentialbooleanfalse是否允许跨域访问的请求方携带凭据(如 Cookie 等)。根据 CORS 规范,如果设置该选项为 true,那么将不能在其他属性中使用 *
allow_origins_by_regexarraynil使用正则表达式数组来匹配允许跨域访问的 Origin,如 [".*\.test.com$"] 可以匹配任何 test.com 的子域名。如果 allow_origins_by_regex 属性已经指定,则会忽略 allow_origins 属性。
allow_origins_by_metadataarraynil通过引用插件元数据的 allow_origins 配置允许跨域访问的 Origin。比如当插件元数据为 "allow_origins": {"EXAMPLE": "https://example.com"} 时,配置 ["EXAMPLE"] 将允许 Origin https://example.com 的访问。
IMPORTANT
  1. allow_credential 是一个很敏感的选项,请谨慎开启。开启之后,其他参数默认的 * 将失效,你必须显式指定它们的值。
  2. 在使用 ** 时,需要清楚该参数引入的一些安全隐患,比如 CSRF,并确保这样的安全等级符合自己预期。

元数据apisix.apache.org/zh/docs/apisix/plugins/cors/#%E5%85%83%E6%95%B0%E6%8D%AE" rel="nofollow" title="#">#

名称类型必选项描述
allow_originsobject定义允许跨域访问的 Origin;它的键为 allow_origins_by_metadata 使用的引用键,值则为允许跨域访问的 Origin,其语义与属性中的 allow_origins 相同。

最简单的就是全配置*号,但是会有安全风险。所以建议将授权范围的域名配置上,缩小跨域范围。注意,有的研发人员喜欢用cookie和localStorage等信息,就需要配置allow_credential:true来启用凭据。(这个原则上不推荐使用,尽量回避)所以示例的配置上,都是使用的"**"进行的配置。

然后就是,allow_header里面,如果不配置*号,那么需要将所有非标准header都添加进去,否则校验不过,依然会提示跨域。


http://www.ppmy.cn/ops/17177.html

相关文章

408数据结构,怎么练习算法大题?

其实考研的数据结构算法题是有得分技巧的 得分要点 会写结构定义(没有就自己写上)写清楚解题的算法思想描述清楚算法实现最后写出时间和空间复杂度 以上这四步是完成一道算法题的基本步骤,也是其中得分的主要地方就是后面两步。但是前面两…

【android 问题 之--自问自答】

同一个task 可以放不同进程的activity吗? 答:可以的。 A activity获取C activity的返回值有什么方法? 答:1.最笨的办法是使用stattactivityforresult方法启动A,B,C。在onActivityResult方法中进行 回传返回值。 2.使用标志位。intent.setFlages(Intent.FLAG_ACTIVITY_F…

模拟电路 第三章(模拟集成电路)

一、模拟集成电路中的直流偏置技术 1、镜像电流源 镜像电流源的电路图如下图所示,、的参数完全相同,即、,由于两管具有相同的基-射极间电压(),所以、。当BJT的较大时,基极电流可以忽略&#xf…

中年自救,我去菲律宾学英语重启人生

在“ 谷雨实验室”看到一文,颇有感触,本以为是一个励志的学习故事,哪知是一声沧桑中年的叹息,在此记录之。 在一个不眠的夜晚,作者坐在穿越夜空的飞机上,下方是黑沉沉的菲律宾海,星星点点的灯光…

唯众消防救援技术实训室解决方案

一、背景 (一)政策背景 1、国家消防安全政策的强化与推进 近年来,国家高度重视消防安全工作,出台了一系列消防安全相关的法律法规和政策文件,如《中华人民共和国消防法》、《消防安全责任制实施办法》等&#xff0c…

大数据开发项目流程

今天分享下在工作中的项目开发流程 1) Mysql hadoop hive oracle hadoop: 实现海量数据的存储和计算 数据库: mysql Oracle 数据仓库: hive 2) 数据库和数据仓库都是将书库转为结构化数据处理(表数据) 联机事务…

AI道路交通违章智能抓拍系统解决方案

项目概述 背景 目前,XX市市全市民用汽车保有量94.62万辆,比上年末增长15.9%,其中私人汽车保有量35.48万辆,减少0.01%。轿车保有量39.45万辆,增长82.1%,其中私人轿车38.65万辆,增长82.1%。电动自…

基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机电子钟闹钟12/24小时制LCD显示 1. 主要功能:2. 讲解视频:3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真程序设计报告讲解视频) 仿真图proteu…