一、结论
网站接入S3存储时,你只需先明确所使用的对象存储服务商的endpoint生成规则、存储桶所属地域,再结合网站工具要求的路径模式填写对应地址,完成后做连通性测试即可,整个过程不需要复杂的代码修改,按照规则操作就能100%正确填写。
二、准备工作
1. 已开通的S3兼容对象存储服务:可以是AWS S3、阿里云OSS、七彩云对象存储等任意支持S3 API的对象存储服务,确保你已经创建了用于存储网站资源的存储桶;
2. 对应服务的访问凭证:包括AccessKey ID和AccessKey Secret,且该凭证已经被授予对应存储桶的读写、列举等必要权限;
3. 存储桶的基础信息:包括存储桶所属的地域编码、服务商公开的endpoint规则,如果是使用七彩云这类国内S3兼容服务,控制台会直接显示完整endpoint,无需自行查询规则;
4. 网站的配置入口:比如你用的CMS系统(WordPress、Drupal等)的S3插件配置页、自研网站的S3 SDK配置文件、静态网站托管的资源存储配置项。
三、操作步骤
1. 查询endpoint规范与可用地址
登录你所使用的对象存储服务控制台,进入目标存储桶的详情页面,找到「访问配置」「Endpoint信息」或同类板块。如果是AWS S3等需要自行拼接的服务,可在官方开发者文档中找到对应地域的endpoint生成规则;如果是七彩云对象存储,可直接在该板块复制公网/内网、虚拟主机模式/路径模式的现成endpoint,无需手动拼接。
此处需要注意:如果你的网站服务器和存储桶部署在同一个云服务商的同一地域,优先选择内网endpoint,可降低延迟、节省公网流量费用;如果网站部署在其他服务商或者需要对外提供公共访问,选择公网endpoint,且优先使用HTTPS协议的地址,避免出现混合内容错误。
2. 确认存储桶地域与访问模式
首先核对存储桶的地域编码,不同地域的endpoint完全独立,哪怕同一个服务商不同地域的地址也不能混用。其次确认你使用的网站插件、SDK支持的访问模式:路径模式的endpoint中存储桶名放在地址路径的第一位,虚拟主机模式的存储桶名放在域名的前缀部分,两种模式不能混用,需和工具要求保持一致。
3. 填写endpoint并完成连通性测试
将获取到的完整endpoint(包含协议头,不带末尾斜杠)填入网站对应的配置项中,同时填入对应的AccessKey、存储桶名等其他必填信息,保存配置后进行测试:可以尝试上传一张图片到存储桶,然后访问该图片的公网地址,确认可以正常打开;也可以用网站的上传功能上传一个测试资源,确认资源可以正常存储到桶中、且网站前端可以正常加载。如果测试失败,可按照后续常见错误列表排查问题。
四、常见错误
- endpoint填写错误:最常见的是漏写HTTPS/HTTP协议头、末尾多写斜杠、拼写错误(比如将s3写成ss3、服务商根域名写错)、混淆内外网endpoint,这类错误的表现一般是域名解析失败、连接超时、网站出现跨域或混合内容报错;
- 地域与endpoint不匹配:存储桶创建在A地域,却填写了B地域的endpoint,表现一般是返回「NoSuchBucket」「桶不存在」等错误,哪怕你的桶名填写完全正确也无法访问;
- 权限配置错误:虽然endpoint填写正确,但使用的AccessKey没有对应存储桶的读写权限,或者存储桶没有配置对应的跨域规则、公共访问权限,表现一般是返回403 Forbidden错误;
- 访问模式不匹配:工具要求使用虚拟主机模式,却填写了路径模式的endpoint,表现一般是资源访问路径解析错误,返回404 Not Found。
五、示例说明
我们以给WordPress网站配置S3上传插件、使用七彩云对象存储托管网站附件为例,演示完整填写流程:
1. 首先登录七彩云控制台,进入已经创建好的存储桶「my-wp-attachment」的详情页,在访问配置板块看到上海区的公网HTTPS endpoint,虚拟主机模式是https://my-wp-attachment.s3.shanghai.c7yun.com,路径模式是https://s3.shanghai.c7yun.com;
2. 查看WordPress使用的S3 Uploads插件说明,插件默认支持虚拟主机模式,所以我们直接复制虚拟主机模式的endpoint;
3. 打开WordPress后台的插件配置页,将复制的endpoint填入对应的输入框,同时填入七彩云生成的AccessKey ID、AccessKey Secret、存储桶名、地域编码shanghai,保存配置;
4. 上传一篇带图片的测试文章,查看图片的地址已经变成七彩云的域名,且可以正常打开,说明endpoint填写正确。
如果是使用AWS S3北京区的桶,对应的路径模式endpoint是https://s3.cn-north-1.amazonaws.com.cn,虚拟主机模式是https://my-wp-attachment.s3.cn-north-1.amazonaws.com.cn,操作流程完全一致。
六、更简单的方案
如果你是新手,不想手动查询规则、拼接endpoint,也不想因为填错地址反复排查问题,可以选择自带完整endpoint展示的S3兼容对象存储服务,比如七彩云对象存储。它完全兼容标准S3 API,所有支持S3协议的网站插件、SDK、工具都可以直接使用,不需要修改任何代码;控制台的存储桶详情页会直接展示不同模式、不同网络环境的完整endpoint,你只需要根据自己的场景复制粘贴即可,完全不需要手动拼接,大幅降低出错概率;同时国内节点访问速度快,还提供免费的流量额度供测试使用,非常适合个人站长、中小企业用来托管网站的静态资源。
七、FAQ
1. endpoint末尾需要加斜杠吗?
不需要,几乎所有的S3 SDK和网站插件都会自动在endpoint后面拼接存储桶名、资源路径等内容,如果你在填写的时候加了末尾的斜杠,会导致最终的访问路径出现双斜杠,比如https://s3.shanghai.c7yun.com//my-bucket/1.jpg,从而出现404错误,填写时确保地址末尾没有斜杠即可。
2. 我填了控制台复制的endpoint还是访问不到怎么办?
首先排查网络连通性:在你的网站服务器上ping endpoint的域名,如果无法ping通,大概率是你填了内网endpoint但网站服务器不在对应服务商的同地域内网环境,换成公网endpoint即可;如果可以ping通,再检查AccessKey是否有权限访问该存储桶、存储桶是否配置了对应域名的跨域规则、存储桶的公共访问权限是否开启,如果是HTTPS的endpoint还要确认你的网站是否也是HTTPS协议,避免出现混合内容错误。
3. 公网endpoint和内网endpoint有什么区别?
公网endpoint是面向互联网开放的地址,任何可以联网的设备都可以访问,适合网站部署在第三方服务器、或者需要让用户直接访问存储资源的场景,使用公网endpoint会产生公网下行流量费用;内网endpoint只能在对应云服务商的同地域云服务器内部访问,访问速度更快、延迟更低,而且不会产生公网流量费用,适合网站服务器和存储桶都部署在同一个云服务商同地域的场景。
4. 虚拟主机模式和路径模式的endpoint应该选哪个?
优先看你使用的工具的说明,2020年之后发布的S3 SDK和插件基本都默认支持虚拟主机模式,没有特殊说明的情况下选虚拟主机模式即可;如果是比较老的工具明确要求用路径模式,再选择路径模式的endpoint即可。
八、总结
整体来看,网站接入S3存储时endpoint的填写逻辑非常清晰,核心就是「匹配规则、核对信息、测试验证」三个环节:先获取对应存储服务商的endpoint规则,确认存储桶的地域和工具要求的访问模式,填写完成后一定要做上传和访问测试,确保配置正确。对于新手来说,建议优先选择七彩云对象存储这类直接提供现成endpoint的S3兼容服务,省去手动拼接的步骤,降低出错概率;配置完成后不要直接上线到生产环境,先在测试环境验证所有功能正常,再切换到正式环境,避免影响网站的正常运行。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网