如果用户不在会话中,我想阻止访问某些内容(例如视频和图像)。并检查它是否已通过身份验证,我在后端(通过redis)使用它:hset users token123 on
示例URL请求:./content/s04-40dm4-de2020.mp4?token=token123
我想通过lua-resty-redis模块检查“ token123”是否为“ on”,如果nginx不会“阻止”该请求,是否可以正常使用。我不知道如何在不损失很多性能的情况下执行此操作,我目前正在将redis模块与此混合使用:
content_by_lua '
... (Check in lua-resty-redis equals "on")
local file = "/ path ..."
local f = io.open (file, "rb")
local content = f: read ("* all")
f: close ()
ngx.print (content)
';
是否有一种方法只能在您未通过身份验证并且上面不执行此操作时阻止?注意:nginx中的位置:“位置〜* ^。+。(jpeg | gif | png | jpg | mp4 | ... etc)”
使用NGINX auth_request处理令牌的验证。
http://nginx.org/en/docs/http/ngx_http_auth_request_module.html#auth_request
location /contents/ {
auth_request /auth;
...
}
location = /auth {
#Validate your token here. You can use proxy request, njs js_content or lua.
proxy_pass ...
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}