Nginx与Lua灰度发布的实现

 更新时间:2020年03月30日 09:02:39   作者:思过崖  
这篇文章主要介绍了Nginx与Lua灰度发布的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

安装 memcached

yum install -y memcached
#启动memcached服务,端口11211,以nobody身份启动,-d后台模式运行
memcached -p11211 -u nobody -d
#将自己的IP设为灰度测试的IP
telnet 127.0.0.1 11211
set 119.32.216.122 0 0 1
1
quit

安装 memcached for lua

wget https://github.com/openresty/lua-resty-memcached/archive/v0.11.tar.gz
tar -zxvf v0.11.tar.gz
mkdir -p /usr/local/share/lua/5.1
cp -r lua-resty-memcached-0.11/lib/resty /usr/local/share/lua/5.1

创建 test.lua 文件

clientIP=ngx.req.get_headers()["X-Real-IP"]
if clientIP == nil then
  clientIP=ngx.req.get_headers()["x_forwarded_for"]
end
if clientIP == nil then
  clientIP=ngx.var.remote_addr
end
  local memcached=require "resty.memcached"
  local memc,err=memcached:new()
  if not memc then
    ngx.say("failed to instantiate memc:",err)
    return
  end
  local ok,err =memc:connect("127.0.0.1",11211)
  if not ok then
    ngx.say("failed to connect:",err)
    return
  end
  local res,flags,err =memc:get(clientIP)
  --ngx.say("value key: ",res,clientIP)
  if err then
    ngx.say("failed to get clientIP",err)
    return
  end
  if res == "1" then
    ngx.exec("@server_test")
    return
  end
  ngx.exec("@server_product")

nginx配置

  server {
    listen 8867;
    server_name www.siguoya.name;
    root /usr/local/nginx/1.12.1/html;
    location / {
      content_by_lua_file /etc/nginx/test.lua;
    }
    location /hello {
      default_type text/plain;
      content_by_lua 'ngx.say("hello lua")';
    }
    location /ua {
      default_type text/plain;
      content_by_lua '
        clientIP=ngx.req.get_headers()["USER-AGENT"]
        ngx.say("IP:",clientIP)
        ';
    }
    location @server_product {
      default_type text/plain;
      return 200 'product';
    }
    location @server_test {
      default_type text/plain;
      return 200 'test';
    }
  }

由于我们将 119.32.216.122 这个IP添加进了memcached中,因此访问 http://www.siguoya.name:8867/ 的时候,看到的内容就是 test

而开启全局代理之后,发现看到的内容就是 product,这样就实现了针对部分用户进行灰度测试的效果

到此这篇关于Nginx与Lua灰度发布的实现的文章就介绍到这了,更多相关Nginx与Lua灰度发布内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx请求头丢失的问题解决

    Nginx请求头丢失的问题解决

    本文主要介绍了在使用Nginx进行请求转发时,遇到请求头参数丢失的问题,导致的原因可能是api_key_id和api_key_value这2个参数传递过程中丢失或则根本没传递,下面就来具体介绍一下
    2024-12-12
  • Centos7 安装Nginx整合Lua的示例代码

    Centos7 安装Nginx整合Lua的示例代码

    这篇文章主要介绍了Centos7 安装Nginx整合Lua的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Nginx timeout超时配置详解

    Nginx timeout超时配置详解

    这篇文章主要介绍了Nginx timeout超时配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Nginx中rewrite(地址重定向)的深入剖析

    Nginx中rewrite(地址重定向)的深入剖析

    Rewrite主要实现url地址重写,以及url地址跳转,下面这篇文章主要给大家介绍了关于Nginx中rewrite(地址重定向)的深入剖析,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 详解Nginx反向代理实现会话(session)保持的两种方式

    详解Nginx反向代理实现会话(session)保持的两种方式

    这篇文章主要介绍了详解Nginx反向代理实现会话(session)保持的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 详解用ELK来分析Nginx服务器日志的方法

    详解用ELK来分析Nginx服务器日志的方法

    这篇文章主要介绍了用ELK来分析Nginx服务器日志的方法,ELK是三个开源软件的缩写,分别表示Elasticsearch,Logstash,Kibana,需要的朋友可以参考下
    2016-03-03
  • nginx实现请求转发

    nginx实现请求转发

    本文给大家分享的是使用nginx实现代理(请求转发)的教程及简单示例,非常实用,有需要的小伙伴可以参考下
    2017-07-07
  • Nginx设置HttpOnly Secure SameSite参数解决Cookie信息丢失

    Nginx设置HttpOnly Secure SameSite参数解决Cookie信息丢失

    本文主要介绍了Nginx中Cookie缺少SameSite属性的问题,并详细解释了HttpOnly、Secure和SameSite属性的作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • nginx部署前端post请求405 not allowed问题解决

    nginx部署前端post请求405 not allowed问题解决

    在配置前端项目的时候遇到了一个post请求405 not allowed,简单记录一下如何配置,这篇文章主要给大家介绍了关于nginx部署前端post请求405 not allowed问题解决方法,需要的朋友可以参考下
    2023-09-09
  • Nginx+SSL搭建 HTTPS 网站

    Nginx+SSL搭建 HTTPS 网站

    最近在研究nginx,整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的,防止中间监听泄露信息,但是去证书服务商那边申请证书又不合算,因为访问服务器的都是内部人士,所以自己给自己颁发证书,忽略掉浏览器的不信任警报即可。下面是颁发证书和配置过程。
    2016-08-08

最新评论