APISIX 忽略uri大小写

前言

最近需要忽略请求uri大小写,即不管uri的大小写都返回小写uri所请求的响应内容,例如请求 xx.vip/A 实际请求 xx.vip/a, 本文主要以 apisix 来讲解如何实现这个功能。

解决

遇到这个需求,首先肯定采用 apisix 的插件来实现,根据前面多次的经验,这个功能应该可以使用 serverless 插件中的 serverless-pre-function 插件来实现,具体的流程如下:

1 获取请求的 uri 2 将uri转为小写 3 修改请求的uri

具体的插件内容如下:

json 复制代码
"serverless-pre-function": {
      "_meta": {
        "disable": false
      },
      "functions": [
"return function(conf, ctx)  local uri = ctx.var.uri;ctx.var.uri= string.lower(uri);ngx.log(ngx.ERR, \"match uri \",  ctx.var.uri ); end"      ],
      "phase": "rewrite"
    }

添加插件后,再次请求路径,发现请求结果还是没有变,查看日志发现uri修改成功了,不知为何还是没有修改成功。

后面又仔细研究了proxy-rewrite插件中修改uri的代码,发现它是使用了 nginx 标准的函数 ngx.req.set_uri 来赋值新的uri。

修改后的插件代码如下:

json 复制代码
 "serverless-pre-function": {
      "_meta": {
        "disable": false
      },
      "functions": [
        "return function(conf, ctx)  local uri = ctx.var.uri;uri= string.lower(uri);ngx.req.set_uri(uri);ngx.log(ngx.ERR, \"match uri \",  ctx.var.uri ); end"
      ],
      "phase": "rewrite"
    }

具体就是请求经过 serverless-pre-function 插件会将uri进行重写,并将重写后的uri赋值。

小结

本文主要就是讲述如何使用 apisix 插件将请求的uri忽略大小写,统一使用小写uri,可能还有别的方法,等我研究完,再更新文章。

参考

相关推荐
摆烂工程师17 小时前
什么是 ChatGPT Business 会员?与 ChatGPT Plus 有什么不同?
前端·后端·程序员
格物致知57017 小时前
Nacos 使用说明
后端
用户685453759776917 小时前
零拷贝技术完全指南:让数据坐上"直达高铁"!🚄
后端
该用户已不存在17 小时前
我的Python工具箱,不用加班的秘密
前端·后端·python
文心快码BaiduComate18 小时前
新手如何高效使用 Zulu 智能体?从入门到提效全指南
前端·后端
G探险者18 小时前
云原生时代下的 JVM 内存管理:为什么你的服务不会“自动扩容”?
后端·云原生
渣哥18 小时前
还在写繁琐监听器?Spring @EventListener 注解让你代码瞬间简化
javascript·后端·面试
搞笑我们是认真的_______狗才写代码18 小时前
技术总监:学着点,我们团队就缺这样的人才
后端
马尚来18 小时前
掌握Kotlin编程,从入门到精通:视频教程
后端·kotlin
yeyong18 小时前
将所有的服务都放在里面做一个容器用supervisor管理进程 VS 用很多容器跑单独应用并集成一套,哪种更好?
后端