文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Windows 环境下nginx 静态资源服务器(图片,文件)权限控制(nginx/openresty/lua)

2023-09-16 08:52

关注

Windows 环境下nginx 静态资源服务器(图片,文件)权限控制(nginx/openresty/lua)

前言

1
同nginx配置server以后,我们可以很方便的直接访问到文件服务器上的文件资源,但是某些情况下,文件资源可能是隐私图片,比如客户注册时上传的身份证照片等等,这时候我们需要对图片访问进行控制,必须登录后才能查看到这些隐私图片。
2
一般来说,我们都是通过后端controller对权限进行控制,但是nginx作为图片服务器的情况下,再专门为此写一个后端程序显然比较笨重。所以根据实际情况,我们采用openresty平台,用lua脚本+redis读取token的方式即可完成对图片访问服务器的权限控制。

步骤

1.服务器文件目录设置

正常来说我们的文件存放目录是统一的,但是由于有些文件是开放访问的,比如网页图片,有的文件是隐私的,比如注册信息。所以此时我们将文件服务器目录修改为两个文件夹,public和private,public用以存放开发文件,private存放登陆后才可以访问的文件。

2.openresty下载

进入官网下载页:http://openresty.org/en/download.html

选择windows版本的压缩包进行下载
在这里插入图片描述
将压缩包解压到本地目录,openresty是nginx和lua的结合,此时我们编写lua脚本并修改nginx.conf,测试openresty。
在openresty目录下的lua文件夹下新建txt文件,

ngx.say('hello lua!!!')

然后重命名txt为hello.lua
如图所示
在这里插入图片描述
在这里插入图片描述
然后在penresty目录下的conf文件夹下,修改nginx.conf

 server {        listen       9000;        server_name  localhost;location  / {default_type 'text/html';rewrite_by_lua_file  lua/hello.lua;}}

在这里插入图片描述
修改完成后,启动openresty下的nginx.exe
然后通过cmd运行

./nginx -s reload

启动nginx
在这里插入图片描述
然后浏览器键入 http://127.0.0.1:9000/ 如图所示即为成功
在这里插入图片描述

3 配置nignx权限控制

#反向代理进入文件查询服务器upstream download{server  127.0.0.1:8282;}    server {        listen       8282;        server_name  localhost;location /file_resources/private/ {            alias  D:/society/file_resources/private/;        }}    server {        listen       8082;        server_name  localhost;        client_max_body_size 10000m;        location  / {            index      index.html;        }        #开放文件,直接进入文件目录查找location /file_resources/public/ {            alias  D:/society/file_resources/public/;        }#隐私文件,匹配下载请求前缀,进入token.lua, 进行token鉴权,location  /file_resources/private/ {default_type 'text/html';rewrite_by_lua_file  lua/token.lua;proxy_pass  http://download;}}

4. token.lua编写

该处获取请求的token为get请求参数获取
如为cookie中, ngx.var.arg_token改为 ngx.var.cookie_token即可

-- 从cookie中获取token值key为token)local token = ngx.var.arg_token--判断token是否为空,为空返回登录if not token then    ngx.redirect("http://127.0.0.1:8086/login", 302)--判断token存在,则根据redis存储格式拼写Token, “..”为字符串拼接else   token = "prefix_user_token_" .. ngx.var.arg_tokenendlocal function close_redis(red)    if not red then        return    end    local pool_max_idle_time = 30000 --毫秒      local pool_size = 50 --连接池大小      local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)     if not ok then        ngx.say("close redis error : ",err);    endend-- 连接redislocal redis = require "resty.redis";local red = redis:new();red:set_timeout(2000)local ok,err = red:connect("192.168.0.28", 6379)if not ok then  ngx.say("failed to connect: ", err)end-- 根据自身redis是否有密码开启本部分--local res, err = red:auth("password")--if not res then--  ngx.say("failed to authenticate: ", err)--end-- redis中若 key 存在返回 1 ,否则返回 0 。local resp, err = red:exists(token) if not resp then      ngx.say("get msg error : ", err)      return close_redis(red)  end  if resp == ngx.null then      resp = ''  end  if resp == 0 then--   ngx.exit(ngx.HTTP_FORBIDDEN)     ngx.redirect("http://127.0.0.1:8086/login", 302)endclose_redis(red)

完成后 执行 nginx -s reload重启nginx即可

5.结果展示

开开放图片在这里插入图片描述

隐私图片访问失败

如图通过开发工具可以看到访问的是图片地址,由于token为空,所以直接转转到了login页面
在这里插入图片描述

隐私图片访问成功

带上token,访问成功
在这里插入图片描述

来源地址:https://blog.csdn.net/MyBurden/article/details/129401537

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯