在nginx中采用lua对请求的url进行hash取模

    目前有一个需求,是需要将nginx反向代理的后端响应的内容进行缓存,并且要平均的分配到10个自定义的目录中。一说到,自动分配的需求,采用hash取模是最常用也是最简单的方案,其中选择hash的字段(内容)必须是变化最多的。比如请求头里面的host和request_url,肯定选择是request_url,因为其变化的内容比较大。

    查看了nginx的官网文档也没有单独对url进行取模的功能模块,当然自己写个set类型的模块也就很容易的问题,但是不想那么复杂的去实现这个方案。之前就提起过,在nginx中用lua脚本可以基本上实现服务端的任何功能了,当然我想这个功能应该可以很简单的实现。

    首先,在nginx的conf中引入murmurHash的第三方实现(这点不得不吐槽下,堂堂lua,连个内部的hash实现都没有)。

 lua_package_path "/home/youboy/nginx/ngx/lib/?.lua;;";
    init_by_lua '
                mmh2 = require "murmurhash2"
        ';
    这个引入和声明指令是全局的,具体的可以看之前的博文。

    接下来是在location中实现取模,并将其赋予一个变量。

location /xxx {
                default_type 'text/plain';
           
                set $hs '1';
                set_by_lua $hs '
                        local x =ngx.var.server_name .. ngx.var.uri
                        hash = mmh2(x)
                        return hash%10;
                ';
                echo $hs;

        }
    请求的url要通过servername和uri拼接来获得。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值