系统未授权页面拦截
介绍
将请求header中不存在 Authorization
字段,且 Cookie 中不存在 auth
关键字的请求链接定义为未授权页面,使用 OpenResty
+ Lua
脚本,对未授权页面进行检测、拦截
1. 创建lua脚本文件 auth.lua
$ mkdir /opt/openresty/nginx/conf/lua && cd /opt/openresty/nginx/conf/lua
$ vim auth.lua
-- 程序配置 --
-- 是否启动拦截
local unauthorized_access = false
----
-- 获取请求的URI
local uri = ngx.var.uri
local authorization_header = ngx.var.http_Authorization
local cookies = ngx.req.get_headers()["Cookie"]
-- 忽略静态资源文件或
if string.match(uri, "%.css$") or string.match(uri, "%.js$") or string.match(uri, "%.jpg$") or string.match(uri, "%.mp4$") or string.match(uri, "%.html$") or string.match(uri, "%.php$") then
return
end
-- 判断是否存在 Authorization 字段
if authorization_header and string.match(authorization_header, "Authorization") then
return
-- 判断 Cookie 中是否包含 auth
elseif cookies and string.match(cookies, "auth") then
return
else
-- 未授权页面写入错误日志
ngx.log(ngx.ERR, "URI: ", uri)
-- 未授权页面返回417状态码
if unauthorized_access then
ngx.log(ngx.ERR, "URI: ", uri)
ngx.status = 417
ngx.say("Unauthorized access")
ngx.exit(417)
end
end
2. 在openresty配置文件中引入 lua 脚本
$ cd /opt/openresty/nginx/conf
$ vim nginx.conf
location / {
access_by_lua_file conf/lua/auth.lua;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://upsteam_server_ip;
}
3. 重新加载 openresty
$ cd /opt/openresty/bin
$ ./openresty -s reload
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
运维小记!
喜欢就支持一下吧
打赏
微信
支付宝