Nginx做静态文件服务器,如何进行权限验证呢?

这篇具有很好参考价值的文章主要介绍了Nginx做静态文件服务器,如何进行权限验证呢?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在我们的日常开发过程中,经常使用nginx做文件读取服务器,因为配置非常简单,方便使用。只要通过IP和端口加上文件路径就可以读到文件或者图片了。但是,我们的安全问题该如何处理?并不是所有的人拿到图片路径就可以访问文件,这样很有可能造成文件泄露。

因此,我们想的是,在通过路径获取文件的时候,可以携带token信息,通过我们的系统服务进行token验证,如果token合法,才能成功获取图片,否则拒绝此次请求。

以下是具体的实现方式,通过Nginx的auth_request模块

1.配置Nginx静态服务器

下载nginx,解压之后,打开conf文件夹下面的nginx.conf
设置静态文件路径,然后在根目录执行nginx启动,静态文件服务器就可以使用了

server {
        listen       8088;
        server_name  127.0.0.1;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            alias   D:/work/file/;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

 Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维

文件夹下放了一张图片,我们打开浏览器,输入http://127.0.0.1/cat.jpeg就可以访问到了

Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维

Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维

2.编写后台授权接口

正常我们都是通过hearder中携带授权token信息,所以我们后台写个接口,通过HttpServletRequest获取header中的token信息,再进行业务的验证就可以了,auth_request模块是根据返回的http状态值来判断是否通过授权,200则为成功,401或者403为授权失败

    @RequestMapping("/authFileValid")
    @ResponseBody
    public void authFileValid(HttpServletRequest request,HttpServletResponse response){
        String token = request.getHeader("accessToken");
        System.out.println("获取的token:"+token);
        if(token != null){
            //验证token是否合法
        }else{
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
        }
    }

3.修改nginx配置文件

server {
        listen       8088;
        server_name  127.0.0.1;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            alias   D:/work/file/;
            # 设置鉴权的请求
            auth_request /authFileValid;
            # 从查询参数中获取 token,并赋值给token变量
            set $token $arg_token;
            # 自定义验证失败时的处理页面
            error_page 401 = /auth-required; 
        }

        location = /authFileValid {
            internal; # 只允许内部访问
            proxy_pass http://127.0.0.1:8080/authFileValid;
            proxy_pass_request_body off;
            proxy_set_header Content-Length "";
            proxy_set_header X-Original-URI $request_uri;
            # 设置AccessToken 的值为token
            proxy_set_header AccessToken "$token";
        }

        location = /auth-required {
             return 401; # 返回 401 状态码
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

注意

 set $token $arg_token中的arg_是参数前缀固定写法,实则是获取的查询参数中的token值

例如http://127.0.0.1:8088/cat.jpeg?token=xxxxx

 4.测试

重新启动nginx,启动后台web,浏览器访问http://127.0.0.1:8088/cat.jpeg,就可以看到下面的结果了

前端:

Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维

后台:

Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维

我们可以看到,再次访问图片返回了401,这时候我们已经没有权限去访问图片了

这次我们随便设置一下token值,后台并没有进行验证token的正确性,便于测试只是验证了非空

前端:

Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维

后端:

Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维

 如此我们便实现了nginx调用后台接口授权的整个流程 

学习更多简单好理解的编程和架构知识!
关注我 不迷路

或者微信 添加公众号,发送NginxAuth获取教程源码

Nginx做静态文件服务器,如何进行权限验证呢?,nginx,服务器,nginx,运维文章来源地址https://www.toymoban.com/news/detail-827601.html

到了这里,关于Nginx做静态文件服务器,如何进行权限验证呢?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解如何使用Nginx搭建文件服务器及实现文件服务

    公司最近有做文件服务器的需求,并且使用到了Nginx做负载均衡服务器,顺水推舟,就想着顺便用作文件服务器算了,实际上它也非常适合。 Nginx是一种轻巧、高效的Web服务器,用作文件服务器非常合适。但是如果需要一些高级功能,如FTP远程访问、多用户管理,可能需要选

    2024年02月09日
    浏览(41)
  • 服务器Nginx权限拒绝的解决方法

    在运行Nginx服务器时,有时候可能会遇到权限拒绝的问题。这种情况通常发生在试图访问或修改某些文件或目录时,Nginx没有足够的权限执行相关操作。本文将介绍如何解决这个问题,并提供相应的源代码示例。 检查Nginx用户和组设置: 首先,我们需要确保Nginx使用的用户和组

    2024年02月03日
    浏览(33)
  • [Linux服务器 ] nginx 配置图片静态访问方法

    一.  Nginx安装 1.更新软件包列表:打开终端,并使用以下命令更新软件包列表: sudo yum update 2.安装 EPEL 存储库:EPEL 存储库提供了额外的软件包,其中包括 Nginx。使用以下命令安装 EPEL 存储库: sudo yum install epel-release 3.安装 Nginx:使用以下命令安装 Nginx: sudo yum install nginx

    2024年02月14日
    浏览(33)
  • 配置Nginx作为静态资源服务器及安全策略

    上一篇文章写了Nginx负载均衡实现方案详解,有同学私信我说能不能写一篇关于nginx代理静态资源的文章。当然没问题,这篇文章就分享一下如何配置Nginx作为静态资源服务器同时也分享一些常用的安全策略配置。 静态资源指的是在服务器端存储的不会变化的文件,这些文件的

    2024年02月21日
    浏览(32)
  • SpringBoot如何使用MultipartFile进行文件上传保存到服务器本地

    之前一直都是用的别人封装好的文件上传方法,这次想自己写一个特别简单的,文件上传方法,非常适合新手观看… 首先需要Springboot需要有Web依赖,就是下面这个依赖 依赖导完了,下面就直接是代码,大家看一下 到这里文件上传的解释都在代码里面,下面如果报文件过大的报错还需

    2024年02月13日
    浏览(45)
  • Nginx 配置一级和二级证书以及作为静态资源服务器

    卷挂载中的 ssl 证书替换为自己 ssl 证书的位置。 关于 nginx *.conf 配置文件不过多描述! 在同一个 default.conf 文件中写 server 就可以。 只作为简单静态资源服务器!

    2024年01月18日
    浏览(41)
  • Nginx与Tomcat的区别,什么是HTTP服务器(处理静态资源的服务器),什么是处理动态资源的服务器

    Nginx和Tomcat都是常用的Web服务器,但它们的主要作用不同。 Nginx是一个HTTP服务器,反向代理服务器和通用TCP/UDP代理服务器。 它通常用于静态内容、媒体流和负载均衡。在高流量和高并发负载下,Nginx表现更出色,并且能够轻松处理静态文件、压缩和SSL/TLS卸载等任务,以减轻

    2024年02月14日
    浏览(28)
  • SSH连接SFTP传输:如何使用libssh库在windows环境下进行(文件、文件夹)传输到远端服务器

    由于windows上的编译器一般都是没有libssh库的,所以如何我们想要使用libssh库那么我们将会使用cmake来编译libssh官网给出的源代码 libssh库下载地址: https://www.libssh.org/files/ 我们在编译libssh库之前需要先配置一些环境: a) 安装 Visual Studio 或者 MinGW b) 安装OpenSSL http://slproweb.com/p

    2024年04月24日
    浏览(47)
  • SSH连接SFTP传输:如何使用libssh库在Linux环境下进行(文件、文件夹)传输到远端服务器

    target_host :远端主机IP target_username :远端主机用户名 ssh_options_set() 函数设置会话的选项。最重要的选项是: SSH_OPTIONS_HOST:要连接到的主机的名称 SSH_OPTIONS_PORT:使用的端口(默认为端口 22) SSH_OPTIONS_USER:要连接的系统用户 SSH_OPTIONS_LOG_VERBOSITY:打印的消息数量 直接传输密

    2024年04月13日
    浏览(52)
  • Ansible copy模块 复制文件使用 主服务器 给副服务器 复制文件使用 指定文件权限 覆盖备份等

    这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。 其相关选项如下: src #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于\\\"rsync\\\" content #用于替换\\\"src\\\",可以直接指定文件的

    2024年04月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包