当您通过OSS内网地址访问OSS资源时,不收取流量费用。本文介绍ECS实例如何通过OSS内网地址访问OSS资源。

通过OSS内网地址访问OSS资源有以下两种方式:
  • 与OSS同地域ECS实例可以直接通过内网访问有权限的OSS资源。
  • 与OSS不同地域的ECS实例或公网用户可通过配置ECS反向代理,间接实现通过OSS内网地址访问OSS资源。

获取OSS内网地址

  • 通过OSS控制台获取

    登录OSS管理控制台,打开指定Bucket的概览页面,在访问域名区域查看Bucket的Endpoint和Bucket域名,如下图所示。访问域名区域

  • 通过固定格式获取

    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 = "<yourAccessKeyId>";
      String accessKeySecret = "<yourAccessKeySecret>";
      OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);          

      更多详情请参见Java SDK初始化

    • PHP SDK
      $accessKeyId = "<您从OSS获得的AccessKeyId>";
      $accessKeySecret = "<您从OSS获得的AccessKeySecret>";
      $endpoint = "<您选定的OSS数据中心访问域名,例如http://oss-cn-hangzhou-internal.aliyuncs.com>";           

      更多详情请参见PHP SDK初始化

    • Python SDK
      auth = oss2.Auth('您的AccessKeyId', '您的AccessKeySecret')
      endpoint = 'http://oss-cn-hangzhou-internal.aliyuncs.com' # 假设Bucket处于杭州地域
      bucket = oss2.Bucket(auth, endpoint, '您的Bucket名称')         

      更多详情请参见Python SDK初始化

    • .NET SDK
      const string accessKeyId = "<your AccessKeyId>";
      const string accessKeySecret = "<your 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, "<您的AccessKeyId>");
      aos_str_set(&options->config->access_key_secret, "<您的AccessKeySecret>");
      options->config->is_cname = 0;
      options->ctl = aos_http_controller_create(options->pool, 0);         

      更多详情请参见C SDK初始化

通过ECS反向代理访问OSS资源

不同地域的ECS实例或外网用户是无法直接通过OSS内网地址访问OSS资源的,但是您可以通过配置ECS反向代理来间接实现:
  1. 在OSS同地域创建一个有公网地址的ECS实例。详情请参见创建ECS实例
  2. 在ECS实例上配置反向代理。详情请参见基于CentOS的ECS实例实现OSS反向代理基于Ubuntu的ECS实例实现OSS反向代理
  3. OSS配置Bucket Policy,允许该ECS实例的内网地址访问OSS资源。详情请参见使用Bucket Policy授权其他用户访问OSS资源

以上步骤配置完成后,您的用户将通过您的ECS公网地址访问您的OSS资源。当用户访问时,ECS实例通过内网向OSS请求资源,之后再返回给用户。