前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ceph RGW配置Nginx代理出现S3Error: 403 (Forbidden)

Ceph RGW配置Nginx代理出现S3Error: 403 (Forbidden)

作者头像
runzhliu
发布2020-08-06 00:03:28
2.3K0
发布2020-08-06 00:03:28
举报
文章被收录于专栏:容器计算容器计算

因为 RGW 的默认 web server 用的是 civetweb,又因为 civetweb 的日志比较简单,没法统计用户通过 S3 读写数据的详细的性能数据,所以就考虑在 RGW 前通过 Nginx 来做本地代理,然后解析 Nginx 的日志,来获取请求状态,数据量和请求的返回时间等信息。 然而一段猛操作之后,发现用户原来通过 s3cmd 2.0.1 能够请求成功的请求全都变成403了,因此本地安装 s3cmd 来测试一下发下还真是 S3Error: 403 (Forbidden),给 s3cmd 加个 debug 选项 -d,错误如下图。

在这里插入图片描述
在这里插入图片描述

这里需要补充一点知识,就是 s3cmd 目前支持两种认真的方式一种是 v2,一种是 v4,而 s3cmd 2.x 版本默认用的是 v4,而 1.x 版本默认用的是 v2,这两种认证方式是有区别的,简单来说就是 v4 除了像 v2,那样需要S3桶的 accesskeysecretkey,还需要如 date 等信息来签名,然后放到 http request 的 Header 上,而 s3cmd 2.x 版本支持通过在 .s3cfg 配置文件,增加选项 signature_v2 = True 来修改认证方式,所以说,如果想快速解决这个403的问题,让用户加上这个选项就可以了。 签名方式的差别,具体可以参考 AWS 的技术文档 Create a string to sign for Signature Version 4。 但是为了不影响用户原来的使用体验,不能说平台方加上了 Nginx 代理之后就让用户各种修改,所以通过查阅相关文档,发现 Nginx 在做代理的时候会将原来请求的 Header 做 buffer 缓存,导致 RGW 接受到的请求的 Header,并不是原来 s3cmd 客户端发过来的那样,具体差别可以参考下面 Reference 的资料。所以这个处理起来也比较简单,只需要给 Nginx 配置文件加上一些特殊的选项就可以了。

代码语言:javascript
复制
proxy_buffering off;
proxy_request_buffering off;

Nginx 代理加上这两个选项之后,S3Error: 403 (Forbidden) 的问题就解决了。

Reference

  1. https://github.com/minio/minio/issues/4120
  2. https://github.com/minio/minio/issues/5571
  3. https://serverfault.com/questions/732839/cant-connect-to-s3-with-nginx
  4. https://www.finbourne.com/blog/authenticating-s3-proxy
  5. https://www.finbourne.com/blog/authenticating-s3-proxy
  6. https://github.com/s3tools/s3cmd/issues/487
  7. http://sealblog.com/2018/03/02/rgw-auth/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Reference
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档