前言
最近公司考虑用apisix作为公司网关并且部署到k8s上,我这边收到一个小任务:使用apisix代理静态文件
通过apisix官网了解到它构建于 NGINX + ngx_lua 的技术基础之上,所以按理应该和nginx代理静态资源是一样的。因为是通过docker容器部署的,需要考虑将静态资源路径挂载出来。
操作步骤
创建持久卷声明
- 通过kubesphere创建持久卷声明
- 在存储设置中选择通过存储类创建,存储类选择local
- 创建完后此时的状态为等待中,持久卷此时还未生成
apisix负载挂载卷
- 编辑设置apisix负载
- 存储设置选择上面的持久卷声明,apisix挂载对应的容器目录(注意:这个挂载的容器路径与持久卷路径是一一对应关系)
- 等待apisix重启成功后,切换存储->持久卷声明界面查看此时状态为已绑定并且生成了持久卷
- 查看持久卷的路径
apisix设置静态资源路由
- 在config.yaml中添加自定义路由(apisix会根据config.yaml配置最终生成nginx.conf)
- 补充nginx相关语法知识
server {// 配置的路径+完整访问路径(完整的location配置路径+静态文件)// 响应http://localhost/about/example.html请求时,nginx将发送/data/www/about/example.html文件location / {root /data/www;}// 配置路径+静态文件(去除location中配置的路径)location /images/ {alias /data;} }
结果验证
- 在apisix负载挂载卷后会自动生成对应挂载目录
- 当持久卷被应用绑定后,在应用上的机器会生成对应持久卷目录
- 在持久卷路径中添加静态资源,容器挂载的目录会生成对应静态资源
- 通过apisix直接访问静态资源