实现目的:ECS的前端网页调用OSS中的图片
进行尝试:最初使用公网调用,发现会直接下载,显示出错,按官方文档进行排错之后,添加了域名,域名添加上了调用成功,但ECS直接调用公网的OSS会产生流量费用,为了节省这部分流量费用,得调用私网地址,然而我调用私网地址就出现了直接下载的情况,这其中已经确认了OSS和ECS在同一个地区,html代码无错,能够ping通OSS内网地址,能够wget通过私网地址下载到此图片,桶和对象的权限相同,都是公共读,设置过http头为下图,也依然无用。
希望能有大佬多多指点,万分感谢
获取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请求资源,之后再返回给用户。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。