Ceph对象存储反向代理
Posted 亦零一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ceph对象存储反向代理相关的知识,希望对你有一定的参考价值。
引言
我们在使用ceph的对象存储时,会发现rgw需要额外做负载均衡、访问日志太粗糙,还有配置不够灵活等等问题。为了解决这些问题,我们会想到在rgw前面做一层反向代理,好的,本篇文章将分享下nginx反代的配置和如何构造免密的s3静态文件访问。
Nginx反向代理配置:
rgw1-3为需要反代的后端rgw的ip,可支持多个。
upstream oss.yilingyi.com{
least_conn;
server rgw1:7480;
server rgw2:7480;
server rgw3:7480;
}
server {
listen 80;
server_name oss.yilingyi.com;
access_log logs/oss.yilingyi.com_access.log json;
location / {
proxy_pass http://oss.yilingyi.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
运行效果:
在介绍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配置如下:
location ~* ^/(.*)/(.*)? {
set $aws_access 'xxxx';
set $aws_secret 'xxxx';
set_by_lua $now "return ngx.cookie_time(ngx.time())";
set $string_to_sign "$request_method\n\n\n\nx-amz-date:${now}\n$request_uri";
set_hmac_sha1 $aws_signature $aws_secret $string_to_sign;
set_encode_base64 $aws_signature $aws_signature;
proxy_http_version 1.1;
proxy_set_header x-amz-date $now;
proxy_set_header Authorization "AWS $aws_access:$aws_signature";
proxy_pass http://oss.yilingyi.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
运行效果:
注:
当然会有人问,直接把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对象存储反向代理的主要内容,如果未能解决你的问题,请参考以下文章