openresty开发系列34--openresty执行流程之4访问阶段

访问阶段

用途:访问权限限制 返回403

nginx:allow 允许,deny 禁止

allow ip;
deny ip;

涉及到的网关,有很多的业务 都是在access阶段处理的,有复杂的访问权限控制
nginx:allow deny 功能太弱

一)access_by_lua
语法:access_by_lua <lua-script-str>
语境:http,server,location,location if
阶段:access tail
为每个请求在访问阶段的调用lua脚本进行处理。主要用于访问控制,能收集到大部分的变量。

用于在 access 请求处理阶段插入用户 Lua 代码。这条指令运行于 access 阶段的末尾,
因此总是在 allow 和 deny 这样的指令之后运行,虽然它们同属 access 阶段。

location /foo {
  access_by_lua_block {
    ngx.log(ngx.DEBUG,"12121212");
  }
  allow 10.11.0.215;
  echo "access";
}

access_by_lua 通过 Lua 代码执行一系列更为复杂的请求验证操作,比如实时查询数据库或者其他后端服务,
以验证当前用户的身份或权限。

利用 access_by_lua 来实现 ngx_access 模块的 IP 地址过滤功能:

location /access {
    access_by_lua_block {
        if ngx.var.arg_a == "1" then
          return
        end
        if ngx.var.remote_addr == "10.11.0.215" then
          return
        end
        ngx.exit(403)
    }

echo "access";
}

对于限制ip的访问,等价于
location /hello {
  allow 10.11.0.215;
  deny all;
  echo "hello world";
}

二)access_by_lua_file

1.1、nginx.conf配置文件
location /lua_access {
  access_by_lua_file /usr/local/luajit/test_access.lua;
  echo "access";
}
 1.2、test_access.lua
if ngx.req.get_uri_args()["token"] ~= "123" then
   return ngx.exit(403)
end
即如果访问如http://10.11.0.215/lua_access?token=234将得到403 Forbidden的响应。
这样我们可以根据如cookie/用户token来决定是否有访问权限。

最新文章

  1. Objective - C NSArray不可变数组和NSMutableArray可变数组
  2. WPF入门教程系列十四——依赖属性(四)
  3. Java集合系列:-----------08HashMap的底层实现
  4. 如何配置pl/sql (本地客户端)连接远程oracle服务器
  5. MySQL的pt-query-digest的下载与使用
  6. 将HTML段赋值给PHP变量的便捷方法,不使用转义字符
  7. 类模板 template&lt;class T&gt;
  8. Traceview 性能分析工具
  9. Python进阶之路---1.3python环境搭建
  10. CTabCtrl - 如何使用TabCtrl控件
  11. Gulp.js简介
  12. COC+RTS+MOR游戏开发 一(游戏特色分析,和实践)
  13. hdu_5691_Sitting in Line(状压DP)
  14. [SQLite]SQL语法
  15. struts加载spring
  16. Python字符串之StringIO和struct
  17. 分享一下自己写的一个vscode-leetcode答题插件
  18. dbus-glib 和 GDBus 的区别
  19. delphi 中实现当期日期 减去 若干小时的方法
  20. selenium 淘宝登入反爬虫解决方案(亲测有效)

热门文章

  1. 了解 npm install -S -D 的区别,看这篇就完事了
  2. Upgrade Windows Server 2016 to Windows Server 2019
  3. Ubuntu安装Gitlab Runner
  4. Kali下的内网劫持(一)
  5. 关于struct和typedef struct
  6. Java 返回字符串中第一个不重复字符的下标 下标从0开始
  7. BZOJ2523/LOJ2646 聪明的学生
  8. 洛谷 P2725 邮票题解
  9. Python开发笔记之-浮点数传输
  10. Mybatis框架-@Param注解