美文网首页
NGINX 反向代理实现(自定义文件名)文件下载

NGINX 反向代理实现(自定义文件名)文件下载

作者: 咯噔爸比 | 来源:发表于2020-08-31 11:30 被阅读0次

    故事的起因是这样的资料上传应用的某云平台的 OSS ,使用的系统自动生成文件名所以就造成了一些不必要的问题,下载的时候无法自定义文件名,堂堂的云平台竟然不支持这个,很正常的需求呀,真有点 233333。
    没办法只能靠自己了,好心疼自己的服务器、带宽、流量呀哦忘记了还有磁盘空间....这个云用的和不用的区别在哪呢,迫于代码修改的复杂故还是妥协了,使用NGINX代理来做吧。

    http{
    #设置反向代理文件配置
        proxy_cache_path /home/file_cache levels=1:2 keys_zone=cache_one:500m inactive=2d max_size=30g;
        .....#代表其它配置
        server {
            listen      80;
            server_name  *.*.*;#域名哈
            location / {
                    if ($request_uri ~* \/(.*)\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|jpg|png)(\?filename=([^&]+))$) {
                            add_header Content-Disposition "attachment;filename=$arg_filename.$2";
                    }
                    proxy_cache cache_one;
                    proxy_cache_valid 200 304 302 48h;
                    proxy_pass *.*.*;
            }
        }
    }
    

    接下来我们来说代码解释

    准备工作

    nginx 要有反带的模块 proxy (一般情况下都有)>


    image.png

    我们来看进程中已经多了cahe 了

    开始解释

    proxy_cache_path /home/file_cache levels=1:2 keys_zone=cache_one:500m inactive=30d max_size=20g;

    proxy_cache_path:表示缓存文件存放的路径,该路径是预先就要创建好的
    levels=1:2 : 设置在相对于path指定目录的第几级hash目录中缓存数据,levels=1,表示一级hash目录,levels=1:2,表示两级hash目录,目录的名称是基于请求URL通过哈希算法得到的
    keys_zone=cache_one:500m : 设置缓存名字 500 允许存储的最大大小
    inactive=30d : 强制更新时间,在指定时间内没人访问,就删除缓存
    max_size=20g : 设置硬盘中缓存数据的大小限制,最大缓存空间

    至此完成

    补充一点😜 就是
    [请求的链接] (http://..*/JQ6mJ6A4Ey.pdf?filename=%E6%B5%8B%E8%AF%95%E6%96%87%E6%A1%A37)

    补充一点 中间遇到了 浏览器不兼容中文的问题,从广大网友热心发布的内容中找到了一线生机

     add_header Content-Disposition "attachment;filename=$arg_filename.$2;filename*=UTF-8''$arg_filename.$2";
    

    "filename" 和 "filename" 两个参数的唯一区别在于,"filename"采用了 RFC 5987 中规定的编码方式。当"filename" 和 "filename" 同时出现的时候,应该优先采用"filename",假如二者都支持的话。

    相关文章

      网友评论

          本文标题:NGINX 反向代理实现(自定义文件名)文件下载

          本文链接:https://www.haomeiwen.com/subject/ldlusktx.html