apisix实现nginx proxy_hide_header参数

前言 最近需要使用 apisix 反向代理 oss, 实现通过域名访问相应的资源(由于条件的限制,不能在oss绑定自定义域名),我直接在 apisix dashboard 配置了路由,创建成功后,我通过浏览器访问时,发现资源不能预览会直接下载。 这样的现象让我很奇怪,通过查阅相关资料,发现使用OSS默认域名通过文件URL从浏览器访问图片或者网页文件时,Response Header中会自动加上Content-Disposition:attachment。 即从浏览器访问这些文件时,会以附件形式进行下载。 解决 通过询问同事,得知他是通过 nginx 的 proxy_hide_header 忽略 Content-Disposition 解决的。 那 apisix 该怎么实现呢,我通过自己的不断尝试和提 issue 询问官方人员,得知可以使用 response-rewrite 插件实现这个功能。 接下来我就来介绍下我尝试的过程吧,我最开始是使用 proxy-rewrite 将 Content-Disposition 设置为 inline,具体配置如下: 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 { "uri": "/*", "name": "xx", "host": "xixi....

November 5, 2022 · 2 min · overstarry

前后端使用AES加密传输数据

最近遇到前后端传输数据需要进行加密的需求,本篇文章就分别介绍使用 Node.js 和 go 进行 AES 加密解密的方法, AES 有很多不同的算法,如aes192,aes-128-ecb,aes-256-cbc等,根据不同的密钥长度会使用不同的算法。 加密后的结果有两种表示方法:hex和base64,我们这里使用 hex. golang 使用 golang 实现 aes 加密,我使用标准库的方法实现,我使用的 CBC 模式。 加密 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 func AesEncrypt(encryptStr string, key []byte, iv string) (string, error) { encryptBytes := []byte(encryptStr) block, err := aes.NewCipher(key) if err != nil { return "", err } blockSize := block.BlockSize() encryptBytes = pkcs5Padding(encryptBytes, blockSize) blockMode := cipher....

October 29, 2022 · 3 min · overstarry

Fly.io初体验

前言 最近在群里看到群友提到了 Fly.io 这个 应用部署平台,相比其它平台,Fly.io 提供了数据库。本篇文章我就来简单介绍如何使用 Fly.io。 安装 flyctl Flyctl 是一个应用命令行工具,可以让你很方便的从创建用户、创建应用并部署应用。 Windows 安装 1 iwr https://fly.io/install.ps1 -useb | iex Linux 安装 1 curl -L https://fly.io/install.sh | sh MAC 安装 1 brew install flyctl 或者 1 curl -L https://fly.io/install.sh | sh 注册 Fly.io 账号 使用 flyctl auth signup 命令进行用户注册,你可以使用电子邮件注册,也可以使用 Github 账号进行登录。 登录账号 使用 flyctl auth login 命令登录你的 Fly.io 账号,由于我没有 Fly.io 账号,前面注册时就会登录,可以直接跳过这步。 启动应用程序 接下来我们就可以进行应用的部署了,Fly.io 使用的是 docker 镜像的方式进行应用部署的,由于我本地环境的限制,本文我使用一个基础的 flyio/hellofly:latest 镜像进行部署使用。 每个应用使用 fly.toml 配置文件来告诉 Fly....

October 22, 2022 · 2 min · overstarry

AI绘画初体验

前言 最近我发现各个群里出现了一股利用 AI 进行绘画的潮流,今天我也尝试使用 Stable Diffusion 模型 进行 AI 绘画。 Stable Diffusion 简介 Stable Diffusion 是一个文本到图像的模型,将使人们可以在几秒钟内创造出令人惊叹的艺术作品。它在速度和质量方面都有突破,这意味着它可以在消费级GPU上运行 开始 我们采用别人封装的 stable-diffusion-webui 平台进行绘画,由于各种条件限制,我们使用 github上提供的 Google colab notbook 进行部署(https://colab.research.google.com/drive/1IplUv47g9CgtlJmFnyT2sDyNYDEeMJDi?usp=sharing). 打开链接,我简单的看了下代码,前面是基础的安装运行环境、需要的 Python package .我们依次运行即可。 我们直接来到 1.4 Connect to Google Drive, 勾选 download_if_missing ,然后到 https://huggingface.co/settings/tokens 复制你的 toekn 并填入。(huggingface 注册耗费了许多时间,reCAPTCHA 没有通过). 点击运行后就开始拉取模型。 如果运行发现报错了: 1 2 remote: Access to model CompVis/stable-diffusion-v-1-4-original is restricted and you are not in the authorized list. Visit https://huggingface.co/CompVis/stable-diffusion-v-1-4-original to ask for access. fatal: unable to access 'https://huggingface....

October 15, 2022 · 1 min · overstarry

Kubernetes Configmaps mounted with subPath not update when changed

起因 最近在使用 k8s 部署应用时,我使用 ConfigMaps 的方式来挂载应用的配置文件。在我的知识储备中,k8s 修改 cm 的内容,pod 里的配置文件应该也会同步更新才是,但是我进入 pod , 发现配置还是旧版本没有更新,需要重启 pod 才会生效。 问题 那为什么配置没有及时更新呢? 通过查阅资料,我发现使用 subPath 挂载的容器不会接收到配置更新。这是为什么呢,相比于没有使用 subPath 有什么区别呢? subPath 使用了符号链接的方式挂载文件,容器内的文件是一个链接到存储在一个隐藏的带有时间戳目录中的同名文件。当 configMaps 更新时,符号链接会更新,但挂载在容器中的文件绑定保持不变。 解决 使用 path字段为特定 ConfigMap 项指定所需的文件路径 具体如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: registry.k8s.io/busybox command: [ "/bin/sh","-c","cat /etc/config/keys" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config items: - key: SPECIAL_LEVEL path: keys restartPolicy: Never 亲测这样是可以正常更新的,但同目录下的其它文件会删除掉,看了几个相关的 issues , 发现你还可以手动创建符号链接到相应的文件夹,...

October 2, 2022 · 1 min · overstarry