Nginx做静态文件服务器,如何进行权限验证呢?
创始人
2025-01-21 13:35:56
0

前言

在我们的日常开发过程中,经常使用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;         #}     }

 

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

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,就可以看到下面的结果了

前端:

后台:

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

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

前端:

后端:

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

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

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

相关内容

热门资讯

分享一款!江汉晃晃辅助器,同城... 分享一款!江汉晃晃辅助器,同城510k修改,要领教程(有挂方式)1、每一步都需要思考,不同水平的挑战...
让我来分享经验!天天贵阳游戏辅... 让我来分享经验!天天贵阳游戏辅助,哥哥打大a有辅助吗,模板教程(有挂助手)1、不需要AI权限,帮助你...
玩家必看分享!龙岩优优辅助,衢... 玩家必看分享!龙岩优优辅助,衢州都莱辅助器,妙招教程(真的有挂)1、让任何用户在无需龙岩优优辅助安装...
终于懂了!手机游戏挂机辅助软件... 终于懂了!手机游戏挂机辅助软件,传送屋激k看底牌辅助软件,练习教程(有挂功能)进入游戏-大厅左侧-新...
玩家必看科普!胡乐情怀宜春外挂... 玩家必看科普!胡乐情怀宜春外挂,同城乐吧乐享版510k辅助,总结教程(有挂攻略)1、首先打开胡乐情怀...
推荐一款!微信三哥玩辅助器,浙... 推荐一款!微信三哥玩辅助器,浙江游戏大厅修改器,学习教程(有挂头条)该软件可以轻松地帮助玩家将微信三...
玩家攻略!凑一桌游戏软件下载辅... 玩家攻略!凑一桌游戏软件下载辅助,新518互游插件,法子教程(的确有挂)1、许多玩家不知道凑一桌游戏...
玩家爆料!湖北卡五星辅助软件,... 玩家爆料!湖北卡五星辅助软件,蜀山四川小程序破解版,练习教程(有挂详情)蜀山四川小程序破解版能透视中...
教程攻略!黑科技微乐小程序辅助... 教程攻略!黑科技微乐小程序辅助器免费,战神辅助官网,操作教程(有挂总结)该软件可以轻松地帮助玩家将黑...
重大推荐!随意玩辅助器视频有挂... 重大推荐!随意玩辅助器视频有挂,欢乐茶馆免费辅助设置,手册教程(发现有挂)随意玩辅助器视频有挂脚本下...