欢迎访问IT教程网

Nginx与Lua

Linux admin 147℃ 0评论

nginx默认不支持lua,需要额外安装luajit,建议使用openrestry

1.安装 openrestry

http://openresty.org/cn/installation.html

./configure --prefix=/opt/openresty \ 
--with-luajit \
--with-pcre \
--with-pcre-jit
--without-http_redis2_module \ 
--with-http_iconv_module \
 --with-http_postgres_module

make  &&make install

测试openresty

server {
      location /hello {
              default_type text/html;
              content_by_lua_block {
                  ngx.say("HelloWorld")
} 
}

nginx调用Lua命令

set_by_lua   set_by_lua_file  设置nginx变量 可以实现负载均衡的赋值逻辑

access_by_lua   access_by_lua_file  请求访问阶段处理用于访问控制

content_by_lua   content_by_lua_file   内容处理器

nginx调用lua Api

ngx.var  nginx变量

ngx.req.get_headers  获取请求头

ngx.req_get_uri_args  获取url请求参数

ngx.redirect  重定向

ngx.print  输出响应内容体

ngx.say  输出响应内容体

ngx.header  输出响应头

Nginx+lua实现简单灰度发布

upstream test{
    server 192.168.1.1:80;
}
upstream prod{
     server 192.168.1.2:80;
}

server {
      listen 80;
      server_name _;
      location /lua {
             content_by_lua_file redis.lua;
             default_type 'text/html';
}

       location @test {
              proxy_pass http://test;
              include proxy_params;
       }
       location @prod {
              proxy_pass http://prod;
              include proxy_params;
        }
}

redis.lua

//引入redis模块
local redis = require "resty.redis"
local cache = redis.new()
cache:set_timeout(60000)
连接redis
local ok,err = cache.connect(cache,'localhost',6379)
if not ok then
    ngx.exec("@test")
    return
end


local local_ip = ngx.req.get_headers()["X_Real_IP"]
if local_ip ==nil then
    local_ip =ngx.req.get_headers()["X_forwarder_for"]
end

if local_ip == nil then
     local_ip = ngx.var.remote_addr
end

local intercept = cache:get(local_ip)
if intercept == local_ip then
    ngx.exec("@prod")
    return
end

ngx.exec("@test")


local ok,err =cache:close()
if not ok then
     ngx.say("faild to close:",err)
end

Nginx+lua实现WAF

部署WAF相关代码

git clone https://github.com/loveshell/ngx_lua_waf
cp -r  ngx_lua_waf  /etc/nginx/waf

nginx配置文件http段添加如下内容

lua_package_path   "/etc/waf/?.lua"
lua_shared_dict limit 10m;
init_by_lua_file  /etc/waf/init.lua;
access_by_lua_file  /etc/waf/waf/lua;
配置规则
RulePath = "/etc/nginx/waf/wafconf"

 

 

 

本文固定链接:IT教程网 » Nginx与Lua
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址