Lua 脚本基础语法
1 | Lua 是一种简洁、轻量、可扩展的脚本语言 |
1 | # Nginx+Lua优势 |
安装 lua
1 | # CentOS 7.4 默认安装好 |
lua 的运行方式
1 | 1. 交互式 |
1 | 2. 非交互式,文件执行 |
lua 的注释
1 | # -- 行注释 |
变量
1 | [root@proxy conf.d]# vim test.lua |
while 循环语句
1 | # 语法 |
1 | [root@proxy conf.d]# vim while100.lua |
for 循环
1 | # 语法 |
1 | [root@proxy conf.d]# vim for100.lua |
if 判断语句
1 | if...then |
1 | # ~= 不等于 |
1 | [root@proxy conf.d]# vim ifelse.lua |
Nginx 加载 Lua环境
1 | 1. 阿里运测试环境 更换系统盘 |
Nginx 编译安装
环境准备
1 | [root@proxy etc]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel openssl-devel |
1 | # 下载最新的 luajit 和 ngx_devel_kit 以及 lua-nginx-module |
解压 ngx_devel_kit 和 lua-nginx-module
1 | # 解压后为ngx_devel_kit-0.2.19 |
安装LuaJIT Luajit是Lua即时编译器。
1 | [root@nginx ~]# tar zxvf LuaJIT-2.0.4.tar.gz |
安装 Nginx 并加载模块
1 | [root@nginx ~]# cd /soft/src |
1 | # 编译安装 |
1 | # 建立软链接, 不建立会出现share object错误 |
验证 nginx+lua
1 | [root@proxy conf]# vim /etc/nginx/conf/nginx.conf |
直接部署春哥的开源项目OpenResty
1 | //安装依赖包 编译完成后就可以使用 |
Nginx 调用 Lua指令
1 | Nginx调用Lua模块指令, Nginx的可插拔模块加载执行, 共11个处理阶段 |
Nginx+Lua实现代码灰度发布
1 | 使用Nginx结合lua实现代码灰度发布,按照一定的关系区别,分不同的代码进行上线,使代码的发布能平滑过渡上线 |
1 | 执行过程: |
实践环境准备
1 | CentOS7 Nginx+Lua+Memcached 172.17.70.227 |
安装两台服务器Tomcat,分别启动8080和9090端口
1 | [root@tomcat-node1-20 ~]# yum install java -y |
1 | # 先搞定8080 然后传过去 |
1 | [root@tomcat-node1 ROOT]# cd /soft/tomcat-8080/webapps/ROOT/ |
1 | [root@tomcat-node2 ROOT]# cd /soft/tomcat-9090/webapps/ROOT/ |
配置 Memcached 并让其支持 Lua 调用
1 | # 安装memcached服务 |
1 | # 启动memcached |
配置 负载均衡调度
1 | # 编译安装的 增加引用 |
1 | [root@proxy conf]# mkdir -p /etc/nginx/conf.d |
1 | # nginx反向代理tomcat,必须配置头部信息否则返回400错误 |
1 | [root@proxy conf]# /etc/nginx/sbin/nginx -t |
1 | http://60.205.217.112/test |
编写 Nginx 调用灰度发布Lua 脚本
1 | # 编写 Nginx 调用灰度发布Lua 脚本 |
1 | [root@proxy lua]# /etc/nginx/sbin/nginx -s reload |
灰度发布
1 | # 把IP 传给 memcached |
1 | # 剔除 |
Nginx+Lua 实现WAF应用防火墙
1 | 1.常见的恶意行为 |
1 | 2.常见的攻击手段 |
1 | 3.常见的攻击手段 |
模拟SQL注入攻击
- 快速安装lnmp架构
1 | [root@proxy ~]# yum install mariadb mariadb-server php php-fpm php-mysql -y |
1 | # 配置MySQL |
1 | # 配置php代码 |
1 | # 被html调用的sql.php文件 |
1 | # 配置Nginx + php |
1 | http://60.205.217.112/sql.php |
使用lua解决此类安全问题
部署Waf相关防护代码
1 | # https://github.com/loveshell/ngx_lua_waf |
1 | //在nginx.conf的http段添加 |
1 | [root@proxy conf.d]# /etc/nginx/sbin/nginx -t |
1 | # 配置config.lua里的waf规则目录(一般在waf/conf/目录下) |
1 | [root@proxy conf.d]# /etc/nginx/sbin/nginx -t |
Nginx + lua防止Sql注入
1 | # 添加规则 |
防止CC攻击
1 | [root@nginx ~]# vim /etc/nginx/waf/config.lua |
1 | # 开个本地虚拟机 测试一下 |
nginx+lua 学习
1 | https://github.com/loveshell/ngx_lua_waf |