我正在 Nginx 代理服务器后面运行一个 MinIO 多服务器实例。
对于 MinIO 集成,我在集成时遇到了麻烦,今天我发现我必须将“S3 CDN URL”设置为“cdn.example.com/bucket_name”,而不是“cdn.example.com”,才能显示上传的图像。
这可能是由于我自己的 MinIO 设置问题,所以请允许我在此提供更多信息。
我有两台服务器运行 MinIO 以获取相同的内容。它们都映射到内部 IP,例如 192.168.1.1 和 192.168.1.2。API 访问端口为 9000,控制台访问端口为 9001。(尽管我使用不同的 IP 和端口,但仅作说明之用。)
我最初在“S3 endpoint”上遇到了麻烦。
将“https://cdn.example.com”作为端点,我一直收到错误。我也尝试过使用控制台访问,例如“s3.example.com”,这是我在 Nginx 代理服务器级别为控制台分发流量的 URL。两者都不起作用。
今天,我将端点更改为“http://192.168.1.1:9000”,就像我为 NextCloud 所做的那样。(我曾为 NextCloud 遇到过类似的问题)。最后,我可以看到文件已上传到 S3。但是,我仍然无法在 Discourse 中看到图像。当我检查空白图像的 URL 时,它看起来像“cdn.example.com/original/1x/…”。换句话说,它缺少我添加到设置中的 S3 存储桶名称。
因此,我将“S3 CDN URL”更改为“https://cdn.example.com/my_bucket_name”。我终于可以在 Discourse 主题编辑以及实时网站上看到图像了。
由于它正在工作,我本打算就此打住,回到我的其他网站,但随后,我看到“S3 Backup Bucket”必须与主上传存储桶不同。如果我启用“使用 CDN URL 来处理上传到 S3 的所有文件,而不仅仅是图像”,S3 备份会怎样?它会将备份文件上传到“https://cdn.example.com/backup_bucket”吗?
所以我尝试运行备份。不出所料,我收到了备份的错误消息。
目前,除非我误配置了 MinIO 和/或 Discourse,否则我认为“S3 CDN URL”应该附加主上传存储桶名称和备份存储桶名称是有意义的。然后,我可以从“https://cdn.example.com/my_bucket_name”回到“https://cdn.example.com”。
此外,我更希望不使用内部 IP 作为“S3 endpoint”。我向 Nextcloud 提出了同样的问题。Discourse 的 S3 模块是如何工作的?我只是想知道为什么我必须提供完整的内部 IP + 端口,而不是我在代理服务器级别分配的 FQDN。如果其中一个 MinIO 服务器发生故障,FQDN 肯定有助于我重定向流量。在当前设置下,如果主后端服务器出现故障,读取可能有效(通过 CDN),但写入操作无效。