Chinaunix首页 | 论坛 | 博客
  • 博客访问: 210573
  • 博文数量: 39
  • 博客积分: 1949
  • 博客等级: 上尉
  • 技术积分: 347
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-24 16:24
文章分类

全部博文(39)

文章存档

2013年(1)

2012年(12)

2011年(24)

2010年(2)

分类: 系统运维

2012-06-23 15:29:44

nginx负载均衡302跳转设置 基于perl的一致性哈希

目的:降低 后端大文件服务器由于新增和故障调整的影响

通过nginx的perl_module来实现302,根据请求的哈希跳转crc32校验

工作环境: perl版本在>=5.10.0 nginx版本 >==0.8.33 二点必要

rewrite.pm 配置


  1. package rewrite;
  2. use nginx;
  3. use Hash::ConsistentHash;
  4. use String::CRC32;

  5.         sub handler {
  6.         my $r = shift;
  7.         my $uri = $r->uri;
  8.         my $domain = $r->header_in(host);
  9.         my @crr = qw( 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5 );

  10.         my $chash = Hash::ConsistentHash->new(
  11.         buckets => [@crr],
  12.         hash_func => \&crc32
  13.         );
  14.         my $url = $chash->get_bucket($uri);
  15.         $url = "http://".$url."/".$domain.$uri;
  16.         $r->header_out(Location => $url);
  17.         $r->status(302);
  18.         $r->send_http_header;
  19.         return OK;
  20. }
  21.         1;
  22.         __END__

nginx server 配置


  1. server {
  2. listen 80 ;
  3. server_name
  4. root /tmp/hello;
  5. location ~ \.exe {
  6. perl rewrite::handler;
  7. }
  8. }

nginx conf配置(加2行)


  1. perl_modules perl/lib;
  2. perl_require rewrite.pm;


由于Hash::ConsistentHash对perl要求版本>=5.10.0,如果你系统perl较低需升级perl版本并重新编译nginx;
Hash::ConsistentHash 下载地址

String::CRC32下载地址



阅读(6186) | 评论(0) | 转发(0) |
0

上一篇:nginx的perl_module

下一篇:nginx 访问密码校验

给主人留下些什么吧!~~