# S3 CDN URL 与 bucket 名称？ - MinIO

**URL:** https://meta.discourse.org/t/s3-cdn-url-w-bucket-name-minio/338667
**Category:** Bug
**Tags:** cdn, s3
**Created:** [2024年十一月27日 06:40 UTC](https://meta.discourse.org/t/s3-cdn-url-w-bucket-name-minio/338667 "2024-11-27T06:40:44Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![keithkhl](https://avatars.discourse-cdn.com/v4/letter/k/919ad9/32.png) [@keithkhl](https://meta.discourse.org/u/keithkhl)
#### Post date: [2024年十一月27日 06:40 UTC](https://meta.discourse.org/t/s3-cdn-url-w-bucket-name-minio/338667/1 "2024-11-27T06:40:44Z")

</div>

我正在 Nginx 代理服务器后面运行一个 MinIO 多服务器实例。  
对于 MinIO 集成，我在集成时遇到了麻烦，今天我发现我必须将“S3 CDN URL”设置为“[cdn.example.com/bucket\_name”，而不是“cdn.example.com”，才能显示上传的图像。](http://cdn.example.com/bucket_name%E2%80%9D%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E2%80%9Ccdn.example.com%E2%80%9D%EF%BC%8C%E6%89%8D%E8%83%BD%E6%98%BE%E7%A4%BA%E4%B8%8A%E4%BC%A0%E7%9A%84%E5%9B%BE%E5%83%8F%E3%80%82)

这可能是由于我自己的 MinIO 设置问题，所以请允许我在此提供更多信息。  
我有两台服务器运行 MinIO 以获取相同的内容。它们都映射到内部 IP，例如 192.168.1.1 和 192.168.1.2。API 访问端口为 9000，控制台访问端口为 9001。（尽管我使用不同的 IP 和端口，但仅作说明之用。）

我最初在“S3 endpoint”上遇到了麻烦。  
将“[https://cdn.example.com](https://cdn.example.com)”作为端点，我一直收到错误。我也尝试过使用控制台访问，例如“[s3.example.com](http://s3.example.com)”，这是我在 Nginx 代理服务器级别为控制台分发流量的 URL。两者都不起作用。

今天，我将端点更改为“[http://192.168.1.1:9000](http://192.168.1.1:9000)”，就像我为 NextCloud 所做的那样。（我曾为 NextCloud 遇到过类似的问题）。最后，我可以看到文件已上传到 S3。但是，我仍然无法在 Discourse 中看到图像。当我检查空白图像的 URL 时，它看起来像“[cdn.example.com/original/1x/](http://cdn.example.com/original/1x/)…”。换句话说，它缺少我添加到设置中的 S3 存储桶名称。

因此，我将“S3 CDN URL”更改为“[https://cdn.example.com/my\_bucket\_name”。我终于可以在](https://cdn.example.com/my_bucket_name%E2%80%9D%E3%80%82%E6%88%91%E7%BB%88%E4%BA%8E%E5%8F%AF%E4%BB%A5%E5%9C%A8) Discourse 主题编辑以及实时网站上看到图像了。

由于它正在工作，我本打算就此打住，回到我的其他网站，但随后，我看到“S3 Backup Bucket”必须与主上传存储桶不同。如果我启用“使用 CDN URL 来处理上传到 S3 的所有文件，而不仅仅是图像”，S3 备份会怎样？它会将备份文件上传到“[https://cdn.example.com/backup\_bucket”吗？](https://cdn.example.com/backup_bucket%E2%80%9D%E5%90%97%EF%BC%9F)

所以我尝试运行备份。不出所料，我收到了备份的错误消息。

目前，除非我误配置了 MinIO 和/或 Discourse，否则我认为“S3 CDN URL”应该附加主上传存储桶名称和备份存储桶名称是有意义的。然后，我可以从“[https://cdn.example.com/my\_bucket\_name”回到“https://cdn.example.com”。](https://cdn.example.com/my_bucket_name%E2%80%9D%E5%9B%9E%E5%88%B0%E2%80%9Chttps://cdn.example.com%E2%80%9D%E3%80%82)

此外，我更希望不使用内部 IP 作为“S3 endpoint”。我向 Nextcloud 提出了同样的问题。Discourse 的 S3 模块是如何工作的？我只是想知道为什么我必须提供完整的内部 IP + 端口，而不是我在代理服务器级别分配的 FQDN。如果其中一个 MinIO 服务器发生故障，FQDN 肯定有助于我重定向流量。在当前设置下，如果主后端服务器出现故障，读取可能有效（通过 CDN），但写入操作无效。

---

<div class="post-metadata">

### Author: ![keithkhl](https://avatars.discourse-cdn.com/v4/letter/k/919ad9/32.png) [@keithkhl](https://meta.discourse.org/u/keithkhl)
#### Post date: [2024年十一月27日 07:02 UTC](https://meta.discourse.org/t/s3-cdn-url-w-bucket-name-minio/338667/2 "2024-11-27T07:02:40Z")

</div>

可能是，或者我会说，更可能是由于我的配置错误和/或与 MinIO/AWS SDK 不兼容。我现在将采用变通方法。

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [2024年十一月27日 07:58 UTC](https://meta.discourse.org/t/s3-cdn-url-w-bucket-name-minio/338667/3 "2024-11-27T07:58:26Z")

</div>

您似乎正在使用路径样式存储桶（`minio.example.com/bucketname`），这将不起作用。您必须配置 `MINIO_DOMAIN`，这将隐式启用虚拟主机样式存储桶（`bucketname.minio.example.com`）

请参阅 [Core Settings | AIStor Object Store Documentation](https://min.io/docs/minio/linux/reference/minio-server/settings/core.html#envvar.MINIO_DOMAIN)

---

<div class="post-metadata">

### Author: ![keithkhl](https://avatars.discourse-cdn.com/v4/letter/k/919ad9/32.png) [@keithkhl](https://meta.discourse.org/u/keithkhl)
#### Post date: [2024年十一月27日 08:24 UTC](https://meta.discourse.org/t/s3-cdn-url-w-bucket-name-minio/338667/4 "2024-11-27T08:24:05Z")

</div>

感谢您的快速答复。

那么，我想知道为什么图像 URL 不是“[bucketname.cdn.example.com](http://bucketname.cdn.example.com)”？  
是因为我添加了 CDN URL，它的作用类似于 CloudFront 的 URL 吗？在我的情况下，如果没有 CDN URL，我担心图像文件路径可能是 http://bucket\_name.192.168.1.1:9000/original/1x/…

如果我确实必须为每个服务器的 MinIO 分配一个 FQDN，并且必须使用其中一个 FQDN 作为端点，那么多服务器负载均衡就没有意义了。
