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内部请求处理,不会暴露给请求用户。

总结

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

相关文章

  • k8s部署ingress-nginx的方法步骤

    k8s部署ingress-nginx的方法步骤

    k8s集群服务部署好之后,需要对外提域名访问,这时候就需要ingress-nginx了,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Nginx服务LNMP之WordPress部署流程步骤

    Nginx服务LNMP之WordPress部署流程步骤

    这篇文章主要为大家介绍了Nginx服务LNMP之WordPress部署流程步骤,本实验意在部署过程,使用单机版部署,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • 详解Nginx服务器中配置Sysguard模块预防高负载的方案

    详解Nginx服务器中配置Sysguard模块预防高负载的方案

    这篇文章主要介绍了详解Nginx服务器中配置Sysguard模块预防高负载的方案,该模块由阿里巴巴的团队开发,能够设置负载阀值,比较强大,需要的朋友可以参考下
    2016-01-01
  • nginx出现权限问题解决(13: Permission denied)

    nginx出现权限问题解决(13: Permission denied)

    本文主要介绍了nginx出现权限问题解决(13: Permission denied),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 一次nginx 504 Gateway Time-out错误排查、解决记录

    一次nginx 504 Gateway Time-out错误排查、解决记录

    这篇文章主要介绍了一次nginx 504 Gateway Time-out错误排查、解决记录,经过反复检查,发现造成这个问题的原因就是PHP的CURL没有设置超时时间,解决办法只要设置超时时间或者修改一下nginx的配置即可解决,需要的朋友可以参考下
    2014-05-05
  • Nginx负载均衡详细介绍

    Nginx负载均衡详细介绍

    nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查
    2016-09-09
  • Nginx负载均衡的4种方案配置实例

    Nginx负载均衡的4种方案配置实例

    这篇文章主要介绍了Nginx负载均衡的4种方案配置实例,本文讲解了轮询、最少连接、IP地址哈希、基于权重的负载均衡等内容,需要的朋友可以参考下
    2015-01-01
  • nginx结合openssl实现https的方法

    nginx结合openssl实现https的方法

    这篇文章主要介绍了基于nginx结合openssl实现https的方法,准备工作大家需要安装nginx服务,具体操作过程跟随小编一起看看吧
    2021-07-07
  • nginx配置域名转发到其他域名的几种方法小结

    nginx配置域名转发到其他域名的几种方法小结

    本文主要介绍了nginx配置域名转发到其他域名的几种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 详解nginx惊群问题的解决方式

    详解nginx惊群问题的解决方式

    这篇文章主要介绍了详解nginx惊群问题的解决方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论