开发者社区> 问答> 正文

如何使用ECS通过内网调用OSS图片

实现目的:ECS的前端网页调用OSS中的图片

进行尝试:最初使用公网调用,发现会直接下载,显示出错,按官方文档进行排错之后,添加了域名,域名添加上了调用成功,但ECS直接调用公网的OSS会产生流量费用,为了节省这部分流量费用,得调用私网地址,然而我调用私网地址就出现了直接下载的情况,这其中已经确认了OSS和ECS在同一个地区,html代码无错,能够ping通OSS内网地址,能够wget通过私网地址下载到此图片,桶和对象的权限相同,都是公共读,设置过http头为下图,也依然无用。

image.png

希望能有大佬多多指点,万分感谢

展开
收起
游客cj54ctm5loyfi 2020-11-24 11:20:45 1754 0
1 条回答
写回答
取消 提交回答
  • 获取OSS内网地址 通过OSS控制台获取 登录OSS管理控制台,打开指定Bucket的概览页面,在访问域名区域查看Bucket的Endpoint和Bucket域名,如下图所示。Domain names

    通过固定格式获取 OSS的访问地址为固定格式:BucketName.Endpoint。其中,BucketName为您的存储空间名称,Endpoint为存储空间所在的地域对应的访问域名。详情请参见OSS访问域名使用规则。

    同地域ECS实例访问OSS资源 与OSS同地域的ECS实例可以通过以下方式使用内网访问OSS资源:

    通过URL直接访问OSS资源 您可以直接使用OSS资源的内网地址访问有权限的OSS资源。例如,杭州地域某Bucket名为test,根目录下有个Object名为1.jpg,处于公共读状态。此时,杭州地域的ECS实例均可以使用http://test.oss-cn-hangzhou-internal.aliyuncs.com/1.jpg访问此Object。因此,您可以将OSS资源的访问URL嵌入到您的网站中,提供给同地域的ECS用户或已通过专线接入到与OSS同地域内网的用户访问。 警告 为了您的数据安全,不建议您将OSS资源设置为公共读或公共读写,您可以通过Bucket Policy授权给指定用户访问您的资源。 通过ossbrowser访问OSS资源 您可以在配置ossbrowser访问参数的时候,将Endpoint设置为自定义,并填写OSS的内网Endpoint地址。详情请参见ossbrowser。

    通过ossutil访问OSS资源 您可以在配置ossutil访问参数的时候,将Endpoint设置为OSS的内网Endpoint地址。详情请参见ossutil。

    通过SDK访问OSS资源 SDK初始化client的时候,Endpoint配置OSS内网对应的Endpoint即可。 Java SDK String endpoint = "http://oss-cn-hangzhou-internal.aliyuncs.com";//以华东 1为例 String accessKeyId = " "; String accessKeySecret = " "; OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    更多详情请参见Java SDK初始化。

    PHP SDK $accessKeyId = " "; $accessKeySecret = " "; $endpoint = "<您选定的OSS数据中心访问域名,例如http://oss-cn-hangzhou-internal.aliyuncs.com>";
    更多详情请参见PHP SDK初始化。

    Python SDK auth = oss2.Auth(' ', ' ') endpoint = 'http://oss-cn-hangzhou-internal.aliyuncs.com' # 您选定的OSS数据中心访问域名,假设Bucket处于杭州地域 bucket = oss2.Bucket(auth, endpoint, 'BucketName')
    更多详情请参见Python SDK初始化。

    .NET SDK const string accessKeyId = " "; const string accessKeySecret = " "; const string endpoint = "http://oss-cn-hangzhou-internal.aliyuncs.com"; var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret);
    更多详情请参见.NET SDK初始化。

    C SDK ptions->config = oss_config_create(options->pool); aos_str_set(&options->config->endpoint, "http://oss-cn-hangzhou-internal.aliyuncs.com"); aos_str_set(&options->config->access_key_id, " "); aos_str_set(&options->config->access_key_secret, " "); options->config->is_cname = 0; options->ctl = aos_http_controller_create(options->pool, 0);
    更多详情请参见C SDK初始化。

    通过ECS反向代理访问OSS资源 不同地域的ECS实例或外网用户是无法直接通过OSS内网地址访问OSS资源的,但是您可以通过配置ECS反向代理来间接实现: 在OSS同地域创建一个有公网地址的ECS实例。详情请参见创建ECS实例。 在ECS实例上配置反向代理。详情请参见基于CentOS的ECS实例实现OSS反向代理和基于Ubuntu的ECS实例实现OSS反向代理。 OSS配置Bucket Policy,允许该ECS实例的内网地址访问OSS资源。详情请参见使用Bucket Policy授权其他用户访问OSS资源。 以上步骤配置完成后,您的用户将通过您的ECS公网地址访问您的OSS资源。当用户访问时,ECS实例通过内网向OSS请求资源,之后再返回给用户。

    2021-02-20 15:03:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS计算与存储分离架构实践 立即下载