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,可能还有别的方法,等我研究完,再更新文章。

参考

相关推荐
Marktowin2 小时前
Mybatis-Plus更新操作时的一个坑
java·后端
赵文宇2 小时前
CNCF Dragonfly 毕业啦!基于P2P的镜像和文件分发系统快速入门,在线体验
后端
程序员爱钓鱼2 小时前
Node.js 编程实战:即时聊天应用 —— WebSocket 实现实时通信
前端·后端·node.js
@22062 小时前
银河麒麟系统离线环境下用docke方式部署(Postgres、Nginx、Redis、JDK)
运维·数据库·redis·nginx
Libby博仙3 小时前
Spring Boot 条件化注解深度解析
java·spring boot·后端
源代码•宸3 小时前
Golang原理剖析(Map 源码梳理)
经验分享·后端·算法·leetcode·golang·map
小周在成长3 小时前
动态SQL与MyBatis动态SQL最佳实践
后端
瓦尔登湖懒羊羊4 小时前
TCP的自我介绍
后端
小周在成长4 小时前
MyBatis 动态SQL学习
后端
子非鱼9214 小时前
SpringBoot快速上手
java·spring boot·后端