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如何配置参数以及变量

    nginx如何配置参数以及变量

    这篇文章主要介绍了nginx如何配置参数以及变量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • nginx结合keepalived实现高可用的完整步骤

    nginx结合keepalived实现高可用的完整步骤

    这篇文章主要给大家介绍了关于nginx结合keepalived实现高可用的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • Apache select和Nginx epoll模型的用法对比

    Apache select和Nginx epoll模型的用法对比

    这篇文章主要介绍了Apache select和Nginx epoll模型的用法对比,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Nginx实现Nacos反向代理的项目实践

    Nginx实现Nacos反向代理的项目实践

    在日常的web网站部署中,经常会用到nginx反向代理,本文主要介绍了Nginx实现Nacos反向代理的项目实践,Nginx实现Nacos反向代理的项目实践
    2022-03-03
  • Nginx限流配置的几种方案的使用小结

    Nginx限流配置的几种方案的使用小结

    Nginx为我们提供了请求限制模块、基于令牌桶算法的流量限制模块,可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制,下面就来介绍一下
    2025-05-05
  • Nginx配置实现用IP灰度测试(不同用户ID)

    Nginx配置实现用IP灰度测试(不同用户ID)

    本文主要介绍了使用Nginx配置实现基于IP的灰度发布实验,以及如何通过不同用户ID测试灰度发布,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • nginx配置相关介绍

    nginx配置相关介绍

    本文为大家介绍一下nginx配置的相关介绍,供大家参考
    2013-02-02
  • 详解nginx websocket配置

    详解nginx websocket配置

    这篇文章主要介绍了详解nginx websocket配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • nginx外网访问内网站点配置操作

    nginx外网访问内网站点配置操作

    这篇文章主要介绍了nginx外网访问内网站点配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Nginx反向代理入门实战指南

    Nginx反向代理入门实战指南

    反向代理:反向代理也叫reverse proxy,指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式,下面这篇文章主要给大家介绍了关于Nginx反向代理的相关资料,需要的朋友可以参考下
    2021-08-08

最新评论