以前在工作中遇到一种场景,公司是自建机房,公网带宽80M,因为客户要求文件服务器也是基于FastDFS在本地机房搭建的。业务场景中就大量涉及图片、音频和视频文件的访问和下载,这样对文件的访问权限控制和下载性能就提出了一定要求。
当时采用的方案大致如下:
- 基于SpringBoot构建独立的文件服务,用于管理文件访问权限和控制用户文件下载速度
- 文件访问和下载仍然由Nginx和FastDFS集群完成,保证文件下载性能水平,并且文件真实下载路径对用户也是不可见的
具体实现步骤:
- Nginx新增文件下载配置,将download请求转发至SpringBoot文件服务(该文件服务当然也可以由其它语言开发)
location /download { proxy_pass http://文件服务IP:文件服务端口; }
- Nginx新增对FastDFS集群的反向代理配置增加内部调用限制,不再允许外部请求直接访问FastDFS中的文件
location /fastdfs { internal; proxy_pass http://FastDFS_IP:FastDFS_PORT; }
- SpringBoot文件服务接口进行鉴权、限速响应头设置及内部重定向操作,完成文件访问控制和限速下载功能