[转载]Nginx 使用 X-Accel-Redirect 实现静态文件下载的统计、鉴权、防盗链、限速等
需求
- 统计静态文件的下载次数;
- 判断用户是否有下载权限;
- 根据用户指定下载速度;
- 根据Referer判断是否需要防盗链;
- 根据用户属性限制下载速度;
X-Accel-Redirect
This allows you to handle authentication, logging or whatever else you please in your backend and then have NGINX handle serving the contents from redirected location to the end user, thus freeing up the backend to handle other requests. This feature is commonly known as X-Sendfile.
这个功能允许你在后端处理权限,日志或任何你想干的,Nginx提供内容服务给终端用户从重定向后的路径,因此可以释放后端去处理其他请求(直接由Nginx提供IO,而不是后端服务)。这个功能类似 X-Sendfile 。
不同Web服务器,相同功能,不同的标识:
nginx: X-Accel-Redirect
squid: X-Accelerator-Vary
apache: X-Sendfile
lighttpd: X-Sendfile/X-LIGHTTPD-send-file
X-Accel-Limit-Rate
限制下载速度,单位字节。默认不限速度。
X-Accel-Buffering
设置此连接的代理缓存,将此设置为no将允许适用于Comet和HTTP流式应用程序的无缓冲响应。将此设置为yes将允许响应被缓存。默认yes。
X-Accel-Expires
如果已传输过的文件被缓存下载,设置Nginx文件缓存过期时间,单位秒。默认不过期。
X-Accel-Charset
设置文件字符集,默认UTF-8
使用条件
- 必须有
Nginx作为后端服务的代理; - 必须访问
Nginx的代理地址,直接访问后端服务Nginx会报404; - 可自行配置
Content-Type来控制是下载(application/octet-stream)还是展示(image/jpeg等);
代码实现
Nginx监听9876端口。Nginx代理后端服务的8080端口。- 设置
/testAccel路径为internal,指定具体文件存储的磁盘位置。 - 后端服务接收到文件下载请求,处理业务逻辑后
X-Accel-Redirect到/testAccel路径。 Nginx收到后端返回信息中的X-Accel-Redirect请求头,接管文件下载或显示任务。- 请求路径:http://localhost:9876/file/download/1234.jpg。
Nginx配置:
location / {#root html;root F:/web/;index index.html index.htm;try_files $uri $uri/ /index.html;}location /testAccel {internal;alias F:/web/testAccel/file;}location /file {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://127.0.0.1:8080; }
Java代码
注意fileName添加:.+,或者获取不到文件后缀名。

@GetMapping("/file/download/{fileName:.+}")public void download(HttpServletRequest request,HttpServletResponse response,@PathVariable("fileName") String fileName) {//统计//鉴权//判断RefererString referer = request.getHeader("Referer");System.out.println(referer);String prefix = "/testAccel";// 在这之前进行一些必要的处理,比如鉴权,或者其它的处理逻辑。// 通过X-Accel-Redirect返回在nginx中的实际下载地址response.setHeader("X-Accel-Redirect", prefix + "/" + fileName);response.setHeader("X-Accel-Limit-Rate", "1024");//限速,单位字节,默认不限response.setHeader("X-Accel-Buffering", "yes");//是否使用Nginx缓存,默认yes}

如果直接访问路径:http://localhost:9876/testAccel/1234.jpg,就会报404错误

参考:
https://www.zhangbj.com/p/507.html
分类: springmvc , nginx
相关文章:
[转载]Nginx 使用 X-Accel-Redirect 实现静态文件下载的统计、鉴权、防盗链、限速等
需求 统计静态文件的下载次数;判断用户是否有下载权限;根据用户指定下载速度;根据Referer判断是否需要防盗链;根据用户属性限制下载速度; X-Accel-Redirect This allows you to handle authentication, logging or …...
继电器的详细分类
继电器的分类方法较多,可以按作用原理、外形尺寸、保护特征、触点负载、产品用途等分类。 一、按作用原理分 1.电磁继电器 在输入电路内电流的作用下,由机械部件的相对运动产生预定响应的一种继电器。 它包括直流电磁继电器、交流电磁继电器、…...
docker的底层原理,带你上天
1、docker的层级怎么看 先查看当前机器上有哪些镜像 docker images 这里选看mysql的层级 docker image inspect mysql:5.7.29 命令。其中RootFS部分则是表示了分层信息。 2、查看docker的系统信息 因为这台机器的docker不是我安装的,所以不知道具体的根目录在哪里…...
HNU-电子测试平台与工具2-串口实验5次
计算机串口使用与测量 【实验属于电子测试平台与工具】 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 0.环境搭建 在实验开始之前,安装好Ubuntu 20.04操作系统。(这个没有难度) 但要提醒的是,这个ubuntu是xubuntu,而且虚拟硬盘只有10GB的大小…...
Ext JS嵌套分组表格的实现
这里的嵌套分组表格指的是这样一种表格 表格的每一行可以展开下一层的Grid展开的嵌套表格是一个分组的表格显示的效果如下图: 这种显示的方式可以显示 3个层级的数据,比如这里的国家 、 将军等级、将军信息。 如果最外层再使用分组的表格, 则可以显示 4个层级的信息, 这种…...
【配电网重构】基于改进二进制粒子群算法的配电网重构研究(Matlab代码实现
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Python编程语言简介
Python 是荷兰人 Guido van Rossum (吉多范罗苏姆,中国程序员称其为“龟叔”)在 1990 年初开发的一种解释型编程语言。 Python 的诞生是极具戏曲性的,据 Guido 自述记载,Python 语言是在圣诞节期间为了打发无聊的时间…...
ChatGPT国内免费访问
背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾🌋。 作为一个程序员,我也忍不住做了一个基于ChatGPT的网站,免费!免梯子!!国内可直接对话ChatGPT,也…...
从零到无搭建Vue项目及代码风格规范
注:已经有vue项目的可以跳过项目初始化 Vue项目搭建 环境搭建 安装nvm 方便后续切换不通的node版本 nvm官网 傻瓜安装就行 或者搜下自己(非本文重点)nvm 安装好后 安装一个Node版本 本文使用的 有了环境开始创建Vue项目 打开命令行 cmd n…...
ASP.NET基于BS结构的实验室预约模型系统(源代码+论文)
《基于B/S结构的实验室预约模型系统》是采用ASP.NET开发的一个开放实验室预约系统。本系统是针对目前实验室手工管理效率低下,缺乏安全性、可控性等缺点,以校园网为依托,采用科学、高效的教学管理方式,使学校的教学资源得到充分的利用。本系统主要实现了教师根据实际教学情…...
Java货运物流园管理系统源码
技术架构:spring boot、mybatis、redis、vue、element-ui 开发语言:java、vue、uniapp 开发工具:idea、vscode、hbuilder 前端框架:vue 后端框架:spring boot 数 据 库:mysql 移 动 端: …...
Linux4.2LAMP
文章目录 计算机系统5G云计算第一章 LINUX LAMP一、概述二、编译安装Apache httpd服务1.关闭防火墙,将安装Apache所需软件包传到/opt目录下2.安装环境依赖包3.配置软件模块4.编译及安装5.优化配置文件路径,并把httpd服务的可执行程序文件放入路径环境变量…...
车载ECU休眠唤醒-TJA1145
前言 首先,请教大家几个小小问题,你清楚: 什么是TJA1145吗?你知道休眠唤醒控制基本逻辑是怎么样的吗?TJA1145又是如何控制ECU进行休眠唤醒的呢?使用TJA1145时有哪些注意事项呢? 今天ÿ…...
平衡二叉树的插入,删除以及平衡调整。
一,平衡二叉树插入失衡情况及解决方案 由于各种的插入导致的不平衡,每次调整都是最小不平衡子树。 LL:由于在结点A的 左孩子的左子树 插入结点导致失衡。 右单旋:①将A的 左孩子B 向右上旋转 代替A成为根节点 ②将A结…...
评价指标计算
混淆矩阵: 准确率(Precision):记为P_i,表示被正确预测为类别i的样本数占所有被预测为类别i的样本数的比例。 召回率(Recall):记为R_i,表示被正确预测为类别i的样本数占…...
Spring Boot如何实现OAuth2授权?
Spring Boot如何实现OAuth2授权? OAuth2是一种授权框架,用于授权第三方应用程序访问受保护的资源。在Web应用程序中,OAuth2通常用于授权用户访问受保护的API。 在本文中,我们将介绍如何使用Spring Boot实现OAuth2授权。我们将使…...
【最小生成树模型】
最小生成树(Minimum Spanning Tree)模型原理与应用 引言 最小生成树(Minimum Spanning Tree,简称MST)是图论中的经典问题之一,它在实际应用中有着广泛的应用。本文将介绍最小生成树模型的原理和应用&…...
【JavaSE】Java基础语法(三十):HashMap与TreeMap
文章目录 1. HashMap1.1 HashMap集合概述和特点1.2 HashMap集合应用案例 2. TreeMap2.1 TreeMap集合概述和特点2.2 TreeMap集合应用案例一2.3 TreeMap集合应用案例二 3. 总结 1. HashMap 1.1 HashMap集合概述和特点 HashMap底层是哈希表结构的依赖hashCode方法和equals方法保…...
Sangria:类似Nova folding scheme的relaxed PLONK for PLONK
1. 引言 前序博客有: Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记SuperNova:为多指令虚拟机执行提供递归证明基于Nova/SuperNova的zkVMSangria:PLONK Folding2023年 ZK Hack以及ZK Summit 亮点记 主要见2023…...
【蓝桥杯省赛真题22】python剩余空间问题 青少年组蓝桥杯比赛python编程省赛真题解析
目录 python剩余空间问题 一、题目要求 1、编程实现 二、解题思路...
LAV Filters完整教程:如何让Windows播放器支持所有视频格式
LAV Filters完整教程:如何让Windows播放器支持所有视频格式 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters LAV Filters是一套基于ffmpeg的开源Di…...
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 你是否曾经为PCB设计文件的查看而烦恼&#…...
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
文章目录环境症状问题原因解决方案环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.8 症状 使用hgdbdeveloper开发工具时,因未正确配置数据库安装路径,导致导入数据时报错: 问题原因 排查开发工…...
3个维度解析PhpWebStudy新版本:打造更稳定安全的本地开发环境
3个维度解析PhpWebStudy新版本:打造更稳定安全的本地开发环境 【免费下载链接】PhpWebStudy Lightweight Native Local Dev Toolbox for Windows, macOS & Linux. Run OpenClaw/n8n/Apache/Nginx/Caddy/Tomcat/PHP/Node.js/Bun/Deno/Python/Java/Go/Ruby/Perl/R…...
MogFace-large模型版本管理实践:使用Docker镜像实现环境一致性
MogFace-large模型版本管理实践:使用Docker镜像实现环境一致性 你是不是也遇到过这样的场景?在本地电脑上跑得好好的MogFace-large人脸检测模型,一放到同事的机器或者服务器上,就各种报错:CUDA版本不对、Python包冲突…...
ai结对编程:让kimi等模型在快马平台帮你智能构建黑马点评
最近在做一个类似大众点评的项目"黑马点评",尝试用AI辅助开发的方式来完成。整个过程在InsCode(快马)平台上完成,体验非常流畅。这里记录下我的开发过程,希望能给同样想尝试AI结对编程的朋友一些参考。 数据库设计阶段 首先需要设…...
LH320@ACP# 规格参数解析 + 应用分享
一、产品核心定位LH320 高集成度 USB‑C PD 3.2 DP Alt‑Mode 二合一控制芯片专为Type‑C 视频转接器、多功能扩展坞设计,单芯片实现:PD 快充协议 DP 视频输出 供电管理 系统控制。二、核心参数详细解析1. 协议与标准接口:USB Type‑C 1…...
AI辅助开发新范式:让快马AI成为你的智能代码库与协作者
最近在整理自己的代码库时,发现一个痛点:随着项目积累,很多实用的代码片段散落在各处,虽然写了注释,但时间久了还是很难快速找到需要的部分。于是萌生了一个想法——开发一个AI辅助的代码片段管理工具。这个工具不仅能…...
CasRel关系抽取完整流程:从原始文本清洗、NER预处理到SPO抽取
CasRel关系抽取完整流程:从原始文本清洗、NER预处理到SPO抽取 1. 什么是CasRel关系抽取? CasRel(Cascade Binary Tagging Framework)是一个专门从文本中自动提取"谁-做了什么-对谁"这种关系信息的AI模型。想象一下&am…...
新手零失败指南:在快马平台跟做交互式openclaw安装教程
最近在折腾一个叫openclaw的工具,作为新手被各种依赖和报错折磨得够呛。后来发现用InsCode(快马)平台可以把这个过程变成交互式教程,特别适合像我这样刚入门的小白。这里把踩坑经验整理成笔记,手把手带你零失败完成安装。 为什么选择交互式安…...
