You need to enable JavaScript to run this app.
导航

管理静态网站(Node.js SDK)

最近更新时间2024.02.04 18:31:09

首次发布时间2023.12.19 18:47:28

TOS 支持托管静态网站,您可以将静态网站的所有内容存储至 TOS 存储桶,配置静态网站规则后,即可通过存储桶域名访问该网站。

设置网站配置规则

注意

  • 一个存储桶中只能创建一条静态网站托管规则。
  • 设置静态网站后,必须绑定自定义域名才能生效,具体操作,请参见绑定自定义域名
  • 出于安全合规考虑,从 2022年10月18日开始,如果您使用存储桶的默认域名访问网页类型文件(mimetype为text/html,扩展名包括 HTM、HTML、JSP、PLG、HTX、STM),Response Header中会自动加上 Content-Disposition:attachment,即从浏览器访问网页类型文件时,将不会直接预览网站,而会将网站的内容下载到本地。

示例代码

以下代码用于设置重定向所有的请求到另外一个站点。

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'],
  accessKeySecret: process.env['TOS_SECRET_KEY'],
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

const bucketName = 'node-sdk-test-bucket';
async function main() {
  try {
    // 场景1 重定向所有的请求到另一个站点
    const { requestId: putWebsiteRequestId } = await client.putBucketWebsite({
      bucket: bucketName,
      redirectAllRequestsTo: {
        HostName: 'www.example.com',
        Protocol: 'http',
      },
    });
    console.log('putBucketReplication Request ID: ', putWebsiteRequestId);

    // 场景2 根据规则重定向请求
    const { requestId: putWebsiteRequestId2 } = await client.putBucketWebsite({
      bucket: bucketName,
      indexDocument: {
        Suffix: 'index.html',
      },
      errorDocument: {
        Key: 'error.html',
      },
      // 前缀匹配,获取重定向结果
      routingRules: [
        {
          // 重定向规则的条件配置
          Condition: {
            // 指定重定向规则的对象键前缀匹配条件
            KeyPrefixEquals: 'prefix',
            // 指定重定向规则的错误码匹配条件
            HttpErrorCodeReturnedEquals: 403,
          },
          // 重定向规则的具体重定向目标配置
          Redirect: {
            // 指定重定向规则的目标协议
            Protocol: 'https',
            HostName: 'www.redirect.com',
          },
        },
      ],
    });
    console.log('putBucketReplication Request ID: ', putWebsiteRequestId2);
  } catch (error) {
    handleError(error);
  }
}

main();

获取网站配置规则

注意

要获取桶的网站配置规则,默认您必须为桶所有者。

示例代码

以下代码用于获取桶的网站配置规则。

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'],
  accessKeySecret: process.env['TOS_SECRET_KEY'],
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

const bucketName = 'node-sdk-test-bucket';
async function main() {
  try {
    const { data, requestId: getWebsiteRequestId } = await client.getBucketWebsite({
      bucket: bucketName,
    });
    console.log('getBucketWebsite Request ID: ', getWebsiteRequestId);

    if (data.RedirectAllRequestsTo != null) {
      console.log('getBucketWebsite RedirectAllRequestsTo HostName:', data.RedirectAllRequestsTo.HostName);
      console.log('getBucketWebsite RedirectAllRequestsTo Protocol:', data.RedirectAllRequestsTo.Protocol);
    }

    if (data.IndexDocument != null) {
      console.log('getBucketWebsite IndexDocument ForbiddenSubDir:', data.IndexDocument.ForbiddenSubDir);
      console.log('getBucketWebsite IndexDocument Suffix:', data.IndexDocument.Suffix);
    }

    if (data.ErrorDocument != null) {
      console.log('getBucketWebsite ErrorDocument Key:', data.ErrorDocument.Key);
    }

    for (const rule of data.RoutingRules || []) {
      console.log('getBucketWebsite RoutingRules Rule Condition HttpErrorCodeReturnedEquals:', rule.Condition.HttpErrorCodeReturnedEquals);
      console.log('getBucketWebsite RoutingRules Rule Condition KeyPrefixEquals:', rule.Condition.KeyPrefixEquals);
      console.log('getBucketWebsite RoutingRules Rule Redirect HostName:', rule.Redirect.HostName);
      console.log('getBucketWebsite RoutingRules Rule Redirect Protocol:', rule.Redirect.Protocol);
      console.log('getBucketWebsite RoutingRules Rule Redirect ReplaceKeyWith:', rule.Redirect.ReplaceKeyWith);
      console.log('getBucketWebsite RoutingRules Rule Redirect ReplaceKeyPrefixWith:', rule.Redirect.ReplaceKeyPrefixWith);
      console.log('getBucketWebsite RoutingRules Rule Redirect HttpRedirectCode:', rule.Redirect.HttpRedirectCode);
    }
  } catch (error) {
    handleError(error);
  }
}

main();

删除网站配置规则

注意

要删除桶的网站配置规则,默认您必须为桶所有者。

示例代码

以下代码用于删除桶的网站配置规则。

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'],
  accessKeySecret: process.env['TOS_SECRET_KEY'],
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

const bucketName = 'node-sdk-test-bucket';
async function main() {
  try {
    const { requestId: deleteWebsiteRquestId } = await client.deleteBucketWebsite({
      bucket: bucketName,
    });
    console.log('deleteBucketWebsite Request ID: ', deleteWebsiteRquestId);
  } catch (error) {
    handleError(error);
  }
}

main();

相关文档

关于设置静态网站配置的更多信息,请参见设置静态网站