更新到 v3.1.17 后 S3 同步错误

截屏 2024122812.45.15.png

系统是 MacOS M1,和之前的版本一样更新,未对 S3 配置做任何修改,并且其它设备 3.1.16 的版本同步正常,是阿里云的桶。不知道有人遇到一样的问题吗,有解决方案吗?谢谢 ~

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    23299 引用 • 94071 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8609 引用 • 39272 回帖 • 146 关注

相关帖子

被采纳的回答
优质回帖
  • Whacka 1 赞同

    感谢测试,我感觉从反馈信息来看应该是前后端计算签名的方法或者参数不一致导致的,比如签名公式的版本(v4?)。

  • lundqhx 1

    我根据这篇博文和 minio 官方文档设置了 Nginx 的相关配置,还是不行。

    我也用了 cloudFlare 管理域名,然后我把 minio api 的子域名的 proxy(橙色云)关闭之后,就可以正常同步了!

  • 使命感油然而生,然而我折腾了几天之后还是决定放弃了,我改用 CloudFlare R2 作为主要同步服务器,群晖上用 rclone 定期同步数据做备份。

    我的环境:

    服务器:群晖 Docker MinIO(还是 24 年中的版本,Docker Hub 被禁用之后我不会升级版本。。。),没有公网 ip 所以选择 CloudFlare Tunnel 做内网穿透。

    客户端:MacBookPro Intel 版本,思源 3.1.18。

    我的一些观察:

    1. 我 blame 了一下思源里 S3 获取 Buckets 列表相关的代码,这部分于 2 周前更新了亚马逊的 sdk v2 版本。在亚马逊的 github 里看到 ListBuckets 函数调用了 c 的函数,具体的签名过程我不知道从哪里查看。
    2. 在 CloudFlare Tunnel 的监听界面里可以获取到访问记录的 http url 和 headers,我对比了 3.1.17 和 3.1.16(iOS)点击“设置”时访问的获取 Buckets 列表操作的记录,发现 url 有比较大的不同,3.1.17 的 url 是 GET https://minioapi.example.com/?x-id=ListBuckets HTTP/1.1,而 3.1.16 则是 GET https://minioapi.example.com/ HTTP/1.1;headers 内容略有不同,但其中非常关键的信息是 X-Amz-Date(例如 20241231T133058Z),这是一个 UTC 时间精确到秒,在相关文档里明确说了这条目是签名认证的关键信息,我用 CloudFlare Rules 调整了一下这个时间果然得到了明确的新的错误信息(格式不正确,或者时间相差太多),但这个条目与我遇到的问题应该没啥关系,因为两个版本发送的 header 里都有它。另一个关键的 header 就是 X-Forwarded-For,然而 CloudFlare Rules 里不允许修改这条的内容,因此我无法确认是否因为 CloudFlare 在代理转发过程中篡改了内容导致签名失败。

    image.png

    image.png

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 阿里云的 regoin 根据阿里云帮助文档修改, 一般是什么 cn-beijing 之类的,别写中文。

  • muweize 1 评论

    +1 求助

    muweize
  • Whacka 1 评论

    +1,我的是自家的 minio S3,地区我自己填的 zh_cn,之前只要服务器和客户端能对上就行,更新之后的提示和你的一样。

    更新之前还测试过可以同步,更新后马上就失效了。

    1 回复
    minio 和思源都改成 cn-beijing 之后还是有报错: operation error S3: ListBuckets, https response error StatusCode: 403, RequestID: 18155E8E4B17xxxx, HostID: dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2xxxx, api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method. (Provider: S3)
    Whacka
  • MinIO 的话 Region 填 us-east-1

    1 回复
  • 感谢,试了修改 minio 服务器 Region 为 us-east-1,思源里也同步修改,点击云端同步设置的按钮,依然这个错误:

    • operation error S3: ListBuckets, https response error StatusCode: 403, RequestID: 18155F8868F8569E, HostID: dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8, api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method. (Provider: S3)
    1 回复
  • 服务器端不要改,用默认的。

    2 回复
  • MinIO VERSION 2024-06-26T01:06:18Z

    已将服务器 Location 恢复默认值:

    image.png

    思源这个设置,依然是刚刚的错误:

    image.png

    1 回复
  • 能升级 MinIO 的话升级看看,我这边测试过最新版没有问题。

    1 回复
  • 收到,我试试看

    1 回复
  • ilovewithu

    minio 更新后,有同步成功吗

    1 回复
  • 我用群晖 Container Manager 部署的 MinIO,想要下载新版但 Docker Hub 无法访问。。。卡住了

  • lundqhx

    我也出现同样的问题。已经升级为最新的 minio 版本。同时地区也设置为默认的 us-east-1

    image.png

    1 回复
  • 那个地址那 path-style 换 v 那个试试吧。另外就是注意一下升级后 key 有没有变化

    1 回复
  • lundqhx

    感谢回复。试了一下换成 virtual-hosted-style,还是不行。我又重新生成了一个 key,还是出现同样的错误。。。

    operation error S3: ListBuckets, https response error StatusCode: 403, RequestID: 1815ED86DD66ED94, HostID: dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8, api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method. (Provider: S3)

    我感觉应该是 Secret key 没有被正确传进去,毕竟配置不变,降级成 3.1.16 就完全没问题

    1 回复
  • Whacka 1 赞同

    感谢测试,我感觉从反馈信息来看应该是前后端计算签名的方法或者参数不一致导致的,比如签名公式的版本(v4?)。

  • 找到一篇博文, 可能说明了为啥会签名失败:

    https://blog.csdn.net/cucgyfjklx/article/details/133165964

    大意是通过 Nginx 反代了 MinIO 的服务后会因为 ip 的变更导致前后端计算签名的参数(ip)不一致。

    我不是很懂 Nginx 和相关技术,我使用的是 CF 的 Tunnel 方案,也许有类似的问题。

    1 回复
  • lundqhx 1

    我根据这篇博文和 minio 官方文档设置了 Nginx 的相关配置,还是不行。

    我也用了 cloudFlare 管理域名,然后我把 minio api 的子域名的 proxy(橙色云)关闭之后,就可以正常同步了!

    2 回复
  • 请问 cf 的 proxy 是指什么呢?有没有相关的指导文档呢,非常感谢!

    1 回复
  • awatar 1 评论

    同样用 cf , 更新 17 之后不能用,折腾一天了 😭

    先退回 3.1.16 版本,可同步了;17 版本应该修改什么 S3 同步参数,但当前 minio 版本不匹配;建议 siyuan 放开更多 s3 云同步参数可设置。先观望吧,解决了再升级新版本。
    awatar 1 赞同
  • ilovewithu

    牛逼,确实关了小黄云可以同步了

    1 回复
  • awatar

    测试 3.1.18 也不行,继续退回 3.1.16

    1 回复
  • 不要回退版本了,建议参考一下其他人的经验进行配置,谢谢。

  • lundqhx

    在 DNS -> Record 里面,把 minio 域名对应的 Proxy Status 改成 DNS only 就可以了

    image.png

    1 回复
  • 我关闭了 minioapi 子域名的小黄云,过了几分钟后思源无法连接服务器了。。。

  • 谢谢,我的方案是 CF Tunnel,所以这里类型不是 A 而是 CNAME,关闭小黄云后直接无法访问了。我猜你的是公网 ip 的方案所以正常?

    image.png

    1 回复
  • 千万不要启用 CDN,否则会影响数据同步的一致性。

    1 回复
  • 我用 CF Tunnel,请问你说的不启用 CDN 是指关闭 Cache 吗?我试着关闭了 Cache 还是签名不匹配。

    image.png

    1 回复
  • 不要对 S3 存储使用任何 CDN,否则数据会被缓存,导致索引对比出现异常。

    1 回复
  • 明白了,但我尝试在 CF Bypass 所有缓存,依然得到之前的结果(签名不匹配)。

    image.png

    1 回复
  • 谢谢,我在这个方向研究一下

    1 回复
  • 解决的话麻烦分享一下方案 🙏

    1 回复
  • vvfree

    我是不同版本的都通过 minio 同步,都成功,家里自建软路由做的服务器,挺正常,自己配的参数都很随意,移动端和 pc 是 3.17,docker 还是非常早的 3.1.6

  • Whacka 1

    使命感油然而生,然而我折腾了几天之后还是决定放弃了,我改用 CloudFlare R2 作为主要同步服务器,群晖上用 rclone 定期同步数据做备份。

    我的环境:

    服务器:群晖 Docker MinIO(还是 24 年中的版本,Docker Hub 被禁用之后我不会升级版本。。。),没有公网 ip 所以选择 CloudFlare Tunnel 做内网穿透。

    客户端:MacBookPro Intel 版本,思源 3.1.18。

    我的一些观察:

    1. 我 blame 了一下思源里 S3 获取 Buckets 列表相关的代码,这部分于 2 周前更新了亚马逊的 sdk v2 版本。在亚马逊的 github 里看到 ListBuckets 函数调用了 c 的函数,具体的签名过程我不知道从哪里查看。
    2. 在 CloudFlare Tunnel 的监听界面里可以获取到访问记录的 http url 和 headers,我对比了 3.1.17 和 3.1.16(iOS)点击“设置”时访问的获取 Buckets 列表操作的记录,发现 url 有比较大的不同,3.1.17 的 url 是 GET https://minioapi.example.com/?x-id=ListBuckets HTTP/1.1,而 3.1.16 则是 GET https://minioapi.example.com/ HTTP/1.1;headers 内容略有不同,但其中非常关键的信息是 X-Amz-Date(例如 20241231T133058Z),这是一个 UTC 时间精确到秒,在相关文档里明确说了这条目是签名认证的关键信息,我用 CloudFlare Rules 调整了一下这个时间果然得到了明确的新的错误信息(格式不正确,或者时间相差太多),但这个条目与我遇到的问题应该没啥关系,因为两个版本发送的 header 里都有它。另一个关键的 header 就是 X-Forwarded-For,然而 CloudFlare Rules 里不允许修改这条的内容,因此我无法确认是否因为 CloudFlare 在代理转发过程中篡改了内容导致签名失败。

    image.png

    image.png

请输入回帖内容 ...

推荐标签 标签

  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 75 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 67 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 43 关注
  • 自由行
    6 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 550 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 97 关注
  • 996
    13 引用 • 200 回帖 • 12 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 370 关注
  • abitmean

    有点意思就行了

    32 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 2 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 383 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 411 关注
  • 分享

    有什么新发现就分享给大家吧!

    247 引用 • 1793 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    78 引用 • 391 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 73 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    138 引用 • 203 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 4 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    178 引用 • 816 回帖 • 2 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 723 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    8 引用 • 30 回帖 • 414 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 624 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 10 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 283 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 81 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 42 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖