nginx与lua开发

# 安装LuaJIT(lua代码解释器),版本自行适配
wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz
# 编译安装
make install PREFIX=/usr/local/LuaJIT
# 导入环境变量
export LUAJIT_LIB=/usr/local/LuaJIT/lib
export LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.0
# 查看环境变量
env

# 下载nginx模块并解压,版本自行适配
# ngx_devel_kit
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
# lua-nginx-module
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz

# 重新编译nginx
# 执行nginx -V 可以获取当前nginx编译参数,copy这些编译参数并在后面加上
--add-module=/opt/download/ngx_devel_kit-0.3.0 \
--add-module=/opt/download/lua-nginx-module-0.10.9rc7
# 执行编译
make -j 4 && make install
# 使用yum安装nginx:自行下载对应版本源码按照以上步骤编译,最后替换可执行文件
cp -rfp objs/nginx /path/sbin/nginx

# 加载lua库,加入到ld.so.conf文件
echo "/usr/local/LuaJIT/lib" >> /etc/ld.so.conf
ldconfig

# 注意,lua调度redis需要安装openresty工具包
# 以下使用yum安装,path=/usr/local/openresty
yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install openresty
  • nginx调用lua模块指令

    • 设置lua变量,可以实现负载的赋值逻辑
      set_by_lua
      set_by_lua_file
    • 请求访问阶段处理,用于访问控制
      access_by_lua
      access_by_lua_file
    • 内容处理器,接收请求处理并输出响应
      content_by_lua
      content_by_lua_file
  • nginx lua api

    • nginx变量:ngx.var
    • 获取请求头:ngx.req.get_headers
    • 获取url请求参数:ngx.req.get_uri_args
    • 重定向:ngx.redirect
    • 输出响应内容体:ngx.print
    • 输出响应内容体,最后输出一个换行符:ngx.say
    • 输出响应头:ngx.header
  • 实践-灰度发布(nginx+lua+redis)

  • 实践-WAF防火墙(nginx+lua+redis)

  • 实践-动态代理(nginx+lua+redis)

# nginx配置

# 在http指令块中添加lua package
lua_package_path "/usr/local/openresty/lualib/?.lua;;";
lua_package_cpath "/usr/local/openresty/lualib/?.so;;";

server
    {
        listen 80 default_server;
        location /
        {
	        set $target '';
	        access_by_lua_file /usr/local/nginx/conf/lua/redis.lua;
	        proxy_pass $target;
	        proxy_http_version 1.1;
	        proxy_set_header Upgrade $http_upgrade;
	        proxy_set_header Connection "Upgrade";
	        proxy_set_header X-Real-IP $remote_addr;
        }
    }
-- lua脚本
-- 关闭redis连接
function close_redis(red)
    if not red then
        return
    end
    local ok, err = red:close()
    if not ok then
        ngx.say("close redis error : ", err)
    end
end

-- 建立redis连接
local redis = require("resty.redis")
local red = redis:new()
red:set_timeout(1000)
local ip = "127.0.0.1"
local port = 6379
local ok, err = red:connect(ip, port)
if not ok then
    ngx.say("connect to redis error : ", err)
    return close_redis(red)
end

-- 获取请求参数
local key = ngx.var.arg_key
local target = ''

-- 调用API获取target
local resp, err = red:get(key)
if not resp then
    ngx.say("get msg error : ", err)
    return close_redis(red)
end

-- 数据为空处理
if resp == ngx.null then
    target = ''
end
target = resp
ngx.var.target = target
close_redis(red)

参考:
nginx lua 教程
openresty installation
nginx lua redis 灰度发布
nginx lua memcache 灰度发布
yum install nginx 新增模块方法
nginx lua redis 读写缓存
git openresty/lua-resty-redis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值