Ceph对象存储反向代理

Posted 亦零一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ceph对象存储反向代理相关的知识,希望对你有一定的参考价值。

引言    

    我们在使用ceph的对象存储时,会发现rgw需要额外做负载均衡、访问日志太粗糙,还有配置不够灵活等等问题。为了解决这些问题,我们会想到在rgw前面做一层反向代理,好的,本篇文章将分享下nginx反代的配置和如何构造免密的s3静态文件访问。

Nginx反向代理配置:    

    rgw1-3为需要反代的后端rgw的ip,可支持多个。

 
   
   
 
  1. upstream oss.yilingyi.com{

  2.         least_conn;

  3.         server rgw1:7480;

  4.         server rgw2:7480;

  5.         server rgw3:7480;

  6. }

  7. server {

  8.    listen       80;

  9.    server_name  oss.yilingyi.com;

  10.    access_log  logs/oss.yilingyi.com_access.log  json;


  11. location / {

  12.        proxy_pass        http://oss.yilingyi.com;

  13.        proxy_redirect    off;

  14.        proxy_set_header  Host $host;

  15.        proxy_set_header  X-Real-IP $remote_addr;

  16.        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

  17.    }

  18. }

运行效果:

    在介绍s3的验证构造前,我们先来了解下ceph的restful的访问风格(pathstyle)分为两种,一种是bucket置于域名前面,如bucket.yilingyi.com/object,另一种是bucket以虚拟目录形式出现,如oss.yilingyi.com/bucket/object,下面的配置匹配的是第二种访问风格,这种风格的好处是统一域名,便于管理。

s3验证构造:    

    nginx构造s3验证是个难点,不像python和java等可以直接调用现成的sdk进行访问,我们需要遵循aws s3 v2签名算法进行构造,在构造过程需要引用到2个nginx的第三方模块,分别是lua-nginx-module用于支持lua脚本、set-misc-nginx-module-master用于支持hmac和base64的计算,具体nginx配置如下:

 
   
   
 
  1. location ~* ^/(.*)/(.*)? {

  2.        set $aws_access       'xxxx';

  3.        set $aws_secret       'xxxx';

  4.        set_by_lua $now       "return ngx.cookie_time(ngx.time())";  

  5.        set $string_to_sign   "$request_method\n\n\n\nx-amz-date:${now}\n$request_uri";

  6.        set_hmac_sha1          $aws_signature $aws_secret $string_to_sign;

  7.        set_encode_base64      $aws_signature $aws_signature;

  8.        proxy_http_version     1.1;

  9.        proxy_set_header       x-amz-date  $now;

  10.        proxy_set_header       Authorization "AWS $aws_access:$aws_signature";

  11.        proxy_pass        http://oss.yilingyi.com;

  12.        proxy_redirect    off;

  13.        proxy_set_header  Host $host;

  14.        proxy_set_header  X-Real-IP $remote_addr;

  15.        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

  16.    }

运行效果:

注:    

    当然会有人问,直接把bucket或object直接设置成public-read不就可以了吗?何必这么折腾?
    没错,搞技术的就是要折腾些,直接把acl设置成public-read将会将bucket或object直接公开,当有异常访问流量时你会显得十分被动。

总结:   

     Nginx是一个高性能的轻量级web服务,用它来做rgw的反代性能、安全和管理都将得到有效的提升。咳咳,第一篇分享就这样献出去了,希望大家喜欢,有兴趣的也可以多交流。

参考文章:

http://docs.ceph.com/docs/master/radosgw/s3/authentication/ https://www.xuebuyuan.com/2214627.html https://github.com/pinterest/pinrepo/blob/master/nginx/proxy.conf


以上是关于Ceph对象存储反向代理的主要内容,如果未能解决你的问题,请参考以下文章

记录ceph对象存储的一个bug

Varnish介绍

【ceph】对象存储 - bucket命名规范

Ceph对象存储介绍与安装

nginx反向代理

ceph这款云存储技术怎么样