Nginx权限控制文件的预览和下载方式

 更新时间:2024年06月19日 10:42:52   作者:伍六柒V  
这篇文章主要介绍了Nginx权限控制文件的预览和下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

基于 Nginx + Java(SpringBoot) 实现带权限验证的静态文件服务器,支持文件下载、PDF预览和图片预览。

需要注意的是,无需权限判断的图片不建议使用此方法,大量的图片访问会增加后台服务器的处理压力。

实现原理

本质上是使用了X-Sendfile功能来实现,X-Sendfile 是一种将文件下载请求重定向到Web 服务器处理的机制,该Web服务器只需负责处理请求(例如权限验证),而无需执行读取文件并发送给用户的任务。

X-Sendfile可显著提高后台服务器的性能,消除了后端程序既要读文件又要处理发送的压力,尤其是处理大文件下载的情形下!

Nginx也具有此功能,但实现方式略有不同。

在Nginx中,此功能称为X-Accel-Redirect。

用户请求文件,权限控制时序图

实现步骤

1、静态文件通过file_server访问,会被设置为internal,即只能内部访问不允许外部直接访问。

# 文件下载服务
location ^~ /file_server {
    # 内部请求(即一次请求的Nginx内部请求),禁止外部访问,重要。
    internal;
    # 文件路径
    alias /home/file/;
    limit_rate 200k;
    # 浏览器访问返回200,然后转由后台处理
    error_page 404 =200 @backend;
}

2、所有静态资源请求均被重定向到Java后台,经过权限验证后才能访问。

# 文件下载鉴权
location @backend {
    # 去掉访问路径中的 /file_server/,然后定义新的请求地址。
    rewrite ^/file_server/(.*)$ /uecom/attach/$1 break;
    # 这里的url后面不可以再拼接地址
    # 定义后台鉴权服务
    proxy_pass http://192.168.1.101:9999;
    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;
}

JAVA SpringBoot 后台权限验证

用户请求只需要传递附件参数和身份token,不再需要传递服务器的真实路径。

例如:

http://127.0.0.1:9222/file_server/img_file?id=123456&token=**********

权限校验完成,返回设置文件请求路径

response.setHeader("X-Accel-Redirect", "/file_server" + attach.getAttachPath());

重点是X-Accel-Redirect配置返回服务器文件的真实路径,该路径返回后由Nginx内部请求处理,不会暴露给请求用户。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx使用mirror指令实现接口复制

    Nginx使用mirror指令实现接口复制

    Nginx中使用mirro指令可以方便地实现接口请求的复制,这个功能非常适合用于流量监控、数据收集或负载均衡,下面我们就来看看具体的用法吧
    2024-10-10
  • Nginx正则表达式相关的参数和规则介绍

    Nginx正则表达式相关的参数和规则介绍

    这篇文章主要给大家介绍了关于Nginx正则表达式相关的参数和规则的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx正则表达式具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • Nginx如何进行流量按比例转发

    Nginx如何进行流量按比例转发

    Nginx 可以借助split_clients指令或通过 weight 参数以及 Lua 脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧
    2025-03-03
  • 基于Xen的VPS ubuntu+nginx+php安装教程

    基于Xen的VPS ubuntu+nginx+php安装教程

    跟踪vps已经很久了,但是因为需要特殊端口开服务,所以符合条件的多为Xen平台的vps。众多比较之后选择了vpslink在西雅图机房,速度还不错。
    2010-07-07
  • nginx代理转发配置小结

    nginx代理转发配置小结

    Nginx配置代理转发是常见需求,涉及编辑nginx.conf文件,添加location块并配置proxy_pass指令指向后端服务器,感兴趣的可以了解一下
    2024-10-10
  • Nginx如何限制IP访问只允许特定域名访问

    Nginx如何限制IP访问只允许特定域名访问

    我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了,下面这篇文章主要给大家介绍了关于Nginx如何限制IP访问只允许特定域名访问的相关资料,需要的朋友可以参考下
    2022-07-07
  • 5种nginx负载均衡配置方法分享

    5种nginx负载均衡配置方法分享

    这篇文章主要介绍了5种nginx负载均衡配置方法分享,分别是nginx自带的3种方法和2种第三方配置方法,需要的朋友可以参考下
    2014-07-07
  • nginx代理参数proxy_pass的实现

    nginx代理参数proxy_pass的实现

    proxy_pass参数用于配置反向代理,本文主要介绍了nginx代理参数proxy_pass的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • nginx虚拟主机防webshell完美版

    nginx虚拟主机防webshell完美版

    nginx虚拟主机防webshell完美版,使用nginx的朋友可以参考下。
    2010-11-11
  • Nginx geoip模块实现地区性负载均衡

    Nginx geoip模块实现地区性负载均衡

    相信做过awstats的都用过开源的geoip.dat ip数据库,刚好nginx wiki上有geoip 模块,这样就可以实现地区性的负载均衡,但是maxmind 的ip数据库对中国的支持不算太好,不过现在也不错了~
    2010-12-12

最新评论