Apisix忽略uri大小写

前言 最近需要忽略请求uri大小写,即不管uri的大小写都返回小写uri所请求的响应内容,例如请求 xx.vip/A 实际请求 xx.vip/a, 本文主要以 apisix 来讲解如何实现这个功能。 解决 遇到这个需求,首先肯定采用 apisix 的插件来实现,根据前面多次的经验,这个功能应该可以使用 serverless 插件中的 serverless-pre-function 插件来实现,具体的流程如下: 1 获取请求的 uri 2 将uri转为小写 3 修改请求的uri 具体的插件内容如下: 1 2 3 4 5 6 7 8 "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。 修改后的插件代码如下: 1 2 3 4 5 6 7 8 9 "serverless-pre-function": { "_meta": { "disable": false }, "functions": [ "return function(conf, ctx) local uri = ctx....

May 26, 2023 · 1 min · overstarry

sqlc初体验

简介 sqlc 可以生成从 SQL 生成类型安全代码。它的工作原理是: 使用 SQL 书写查询语句。 运行 sqlc 生成 Go 代码,该代码为这些查询提供类型安全的接口。 在应用程序代码中调用生成的代码与数据库进行交互。 安装 sqlc 有多种安装方式: macOS: brew install sqlc Ubuntu: sudo snap install sqlc go安装: 1 2 3 4 # Go >= 1.17: go install github.com/kyleconroy/sqlc/cmd/[email protected] # Go < 1.17: go get github.com/kyleconroy/sqlc/cmd/sqlc docker安装: docker pull kjconroy/sqlc 其它: https://github.com/kyleconroy/sqlc/releases 入门使用 插件 sqlc.yaml 首先创建 sqlc.yaml 文件, sqlc 会在当前目录下查找 sqlc.yaml 或 sqlc.json文件。 1 2 3 4 5 6 7 8 # sqlc....

May 20, 2023 · 4 min · overstarry

Apisix Docker部署网站重定向端口错误问题

前言 前段时间在使用 apisix 添加路由时,需要将 http 转为 https, 在配置 http_to_https 后,访问相应网址时发现 https 的端口不是我们所配置的默认端口 443,而是 9443 端口。 可以看到访问 http://localhost 会跳转至错误的地址: https://localhost:9443/ ,正确的地址应该是 https://localhost,这是怎么回事呢? 分析 接下来我来简单对问题进行简单分析。 我是采用 docker 的方式部署的apisix,这是我们的配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 version: "3" services: apisix-dashboard: image: apache/apisix-dashboard:3....

May 13, 2023 · 1 min · overstarry

Go wasi

WebAssembly是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如C / C ++等语言提供一个编译目标,以便它们可以在Web上运行。它也被设计为可以与JavaScript共存,允许两者一起工作。 Go从1.11版本就开始支持将Go源码编译为wasm二进制文件,并在支持wasm的浏览器环境中运行。 不过WebAssembly绝不仅仅被设计为仅限于在Web浏览器中运行,核心的WebAssembly语言是独立于其周围环境的,WebAssembly完全可以通过API与外部世界互动。在Web上,它自然使用浏览器提供的现有Web API。然而,在浏览器之外,之前还没有一套标准的API可以让WebAssembly程序使用。这使得创建真正可移植的非Web WebAssembly程序变得困难。WebAssembly System Interface(WASI)是一个填补这一空白的倡议,它有一套干净的API,可以由多个引擎在多个平台上实现,并且不依赖于浏览器的功能(尽管它们仍然可以在浏览器中运行)。 Go 1.21将增加对WASI的支持,初期先支持WASI Preview1版本,之后会支持WASI Preview2版本,直至最终WASI API版本发布! go 编译支持 wasi 的程序 怎么样才能编译支持 wasi 的程序呢? 我们可以使用GOOS=wasip1 GOARCH=wasm将Go源码编译为支持WASI的wasm程序。下面是一个例子: 我们先编写一个简单的 go 程序: 1 2 3 4 5 6 7 8 package main import "fmt" func main() { fmt.Println("Hello, World!") } 使用以下命令编译: GOARCH=wasm GOOS=wasip1 gotip build -o main.wasm main.go 编译后会得到 wasm 程序 main.wasm。 我们可以使用 wazero 运行编译后的 wasm 程序: 1 2 3 $ curl https://wazero.io/install.sh $ wazero run main....

May 2, 2023 · 1 min · overstarry

Go实现简单反向代理

前言 说起反向代理,大家应该都不陌生,是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。常见的反向代理有 Nginx,HAProxy,Apisix 等。 接下来介绍如何使用 go 实现一个反向代理服务器。 golang 实现 使用 golang 实现反向代理非常简单,标准库 net/http/httputil 提供了反向代理的方法可以让我们方便的实现反向代理,使我们可以很快的实现一个简单的反向代理服务器。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package main import ( "log" "net/http" "net/http/httputil" "net/url" ) func NewProxy(targetHost string) (*httputil.ReverseProxy, error) { url, err := url.Parse(targetHost) if err != nil { return nil, err } return httputil....

April 8, 2023 · 3 min · overstarry