我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录