3 minutes reading time
最近需要使用 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,具体配置如下:
curl 结果:
$ curl -I xxk/index.html
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 5556
Connection: keep-alive
date = Sat, 05 Nov 2022 06:45:06 GMT
Vary: Accept-Encoding
Accept-Ranges: bytes
ETag: "xxx"
Last-Modified: Wed, 02 Nov 2022 10:27:56 GMT
Content-Disposition: attachment
Content-MD5: ExxA==
Server: APISIX/2.13.3
可以看到 Content-Disposition: attachment 没有改变。
接下来我尝试使用 response-rewrite 插件进行,我的配置如下:
curl 后发现还是没有成功,后来通过issue问题回答的帮助得知我所使用的 apisix 2.13.3 不支持 Remove/Add/Set Header 操作, Remove/Add/Set Header 操作 是3.0 版本才增加的功能,最后我的配置如下:
curl 结果:
$ curl -I xx.work/index.html
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 5556
Connection: keep-alive
date = Sat, 05 Nov 2022 06:59:00 GMT
Vary: Accept-Encoding
Accept-Ranges: bytes
Last-Modified: Wed, 02 Nov 2022 10:27:56 GMT
Server: APISIX/2.13.3
本文介绍了如何使用 apisix 实现 nginx proxy_hide_header 相同的操作。