本教程介绍了如何配置 Cloud Storage 存储分区以便为您拥有的网域托管静态网站。静态网页可使用 HTML、CSS 和 JavaScript 等客户端技术。静态网页不能包含动态内容,例如 PHP 等服务器端脚本。
由于 Cloud Storage 本身不支持使用 HTTPS 的自定义网域,因此本教程将 Cloud Storage 与 HTTP(S) 负载平衡搭配使用,以通过 HTTPS 传送自定义网域中的内容。如需了解通过 HTTPS 从自定义网域传送内容的更多方式,请参阅相关问题排查主题。您还可以使用 Cloud Storage 来通过 HTTP 传送自定义网域内容,这不需要负载平衡器。
如需查看有关静态网页的示例和提示(包括如何为动态网站托管静态资源),请参阅静态网站页面。
目标
本教程将介绍如何执行以下操作:- 创建存储分区。
- 上传和共享您的网站的文件。
- 设置负载平衡器和 SSL 证书。
- 将负载平衡器连接到您的存储分区。
- 使用
A
记录将您的网域指向负载平衡器。 - 测试网站。
费用
本教程使用 Google Cloud 的以下收费组件:
- Cloud Storage
- Cloud Load Balancing
如需详细了解托管静态网站时可能产生的费用,请参阅关于监控费用的提示;如需详细了解 Cloud Storage 费用,请参阅价格页面。
准备工作
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
- 准备一个归您所有或管理的网域。如果您还没有现成可用的域名,可以通过多项服务(例如 Google Domains)注册一个新域名。
本教程使用的网域是
example.com
。 - 确认您是要使用的网域的所有者或管理员。确保您所验证的网域是顶级网域(如
example.com
),而不是子网域(如www.example.com
)。注意:如果您是要关联到存储分区的网域的所有者,则说明您过去可能已经执行此步骤。如果您的网域是通过 Google Domains 购买的,那么系统会自动进行验证。
- 准备一些您要传送的网站文件。如果您至少有一个索引页面 (
index.html
) 和 404 页面 (404.html
),那么最适合使用本教程。 - 具有以下 Identity and Access Management 角色:Storage Object Admin 和 Network Admin。
创建存储分区
如需创建名为 www.example.com
的存储分区,请执行以下操作:
控制台
- 在 Google Cloud Console 中打开 Cloud Storage 浏览器。
打开 Cloud Storage 浏览器 点击创建存储分区,打开存储分区创建表单。
输入您的存储分区信息,然后点击继续以完成各个步骤:
点击创建。
如果成功,则“存储分区详情”页面将打开并显示“此存储分区中没有任何活跃对象”的文本。
请参阅问题排查,了解如何获取有关 Cloud Storage 浏览器中失败操作的详细错误信息。
gsutil
使用 gsutil mb
命令:
gsutil mb -b on gs://www.example.com
如果成功,此命令会返回以下内容:
Creating gs://www.example.com/...
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个将您的网站名称分配给
name
属性的.json
文件:{ "name": "www.example.com" }
使用
cURL
调用 JSON API。对于 www.example.com:curl -X POST --data-binary @website-bucket-name.json \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b?project=my-static-website"
XML API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
cURL
调用 XML API,以使用您的网站名称创建一个存储分区。对于 www.example.com:curl -X PUT \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "x-goog-project-id: my-static-website" \ "https://storage.googleapis.com/www.example.com"
上传网站的文件
将您希望网站传送的文件添加到您的存储分区中:
控制台
- 在 Google Cloud Console 中打开 Cloud Storage 浏览器。
打开 Cloud Storage 浏览器 在存储分区列表中,点击您创建的存储分区的名称。
此时会打开“存储分区详情”页面,其中“对象”标签页已选中。
点击上传文件按钮。
在文件对话框中,浏览至所需文件并将其选中。
上传完成后,您应该会看到文件名和存储分区中显示的文件信息。
请参阅问题排查,了解如何获取有关 Cloud Storage 浏览器中失败操作的详细错误信息。
gsutil
使用 gsutil cp
命令将文件复制到您的存储分区。例如,要从文件 index.html
的当前位置 Desktop
复制此文件,请使用以下命令:
gsutil cp Desktop/index.html gs://www.example.com
如果成功,此命令会返回以下内容:
Copying file://Desktop/index.html [Content-Type=text/html]... Uploading gs://www.example.com/index.html: 0 B/2.58 KiB Uploading gs://www.example.com/index.html: 2.58 KiB/2.58 KiB
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
使用 Blob.upload_from_file()、Blob.upload_from_filename() 或 Blob.upload_from_string() 方法上传对象。Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
cURL
,通过POST
Object 请求调用 JSON API。对于 www.example.com 的索引页面:curl -X POST --data-binary @index.html \ -H "Content-Type: text/html" \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ "https://storage.googleapis.com/upload/storage/v1/b/www.example.com/o?uploadType=media&name=index.html"
XML API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
cURL
,通过PUT
Object 请求调用 XML API。对于 www.example.com 的索引页面:curl -X PUT --data-binary @index.html \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "Content-Type: text/html" \ "https://storage.googleapis.com/www.example.com/index.html"
共享您的文件
如需将存储分区中的所有对象设为可供公共互联网上的所有人读取,请执行以下操作:
控制台
- 在 Google Cloud Console 中打开 Cloud Storage 浏览器。
打开 Cloud Storage 浏览器 在存储分区列表中,点击要公开的存储分区的名称。
选择页面顶部附近的权限标签。
点击添加成员按钮。
随即会显示“添加成员”对话框。
在新成员字段中,输入
allUsers
。在选择角色下拉菜单中,选择 Cloud Storage 子菜单,然后点击 Storage Object Viewer 选项。
点击保存。
点击允许公开访问。
对象群组被公开共享后,“公共访问权限”列中会针对每个对象显示一个链接图标。您可以点击此图标来获取对象的网址。
请参阅问题排查,了解如何获取有关 Cloud Storage 浏览器中失败操作的详细错误信息。
gsutil
使用 gsutil iam ch
命令:
gsutil iam ch allUsers:objectViewer gs://www.example.com
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个包含以下信息的 .json 文件:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL
,通过PUT
Bucket 请求调用 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的名称。OAUTH2_TOKEN
是您在第 1 步中创建的访问令牌。BUCKET_NAME
是您要公开其对象的存储分区的名称。例如my-bucket
。
XML API
XML API 不支持将存储分区中的所有对象设为可供公开读取。请改用 gsutil 或 JSON API,或为每个对象设置 ACL。
如需将存储分区中的单个对象设为可公开访问,您需要将存储分区的访问权限控制模式切换为精细控制。通常,这样可以更轻松、更快地访问存储分区中的所有文件。
如果访问者向网址请求非公开或不存在的文件,他们会收到 http 403
响应代码。如需了解如何添加使用 http 404
响应代码的错误页面,请参阅下一部分。
推荐:分配专用页面
您可以分配索引页面后缀(由 MainPageSuffix
属性控制)和自定义错误页面(由 NotFoundPage
属性控制)。分配这些页面都是可选的,但如果没有索引页面,则当用户访问您的顶级网站(例如 https://www.example.com
)时,将没有内容可以传送。如需详细了解 MainPageSuffix
和 NotFoundPage
属性,请参阅专用页面。
在以下示例中,MainPageSuffix
设置为 index.html
,NotFoundPage
设置为 404.html
:
控制台
- 在 Google Cloud Console 中打开 Cloud Storage 浏览器。
打开 Cloud Storage 浏览器 在存储分区列表中,找到您所创建的存储分区。
点击与存储分区关联的存储分区溢出菜单 (
),然后选择修改网站配置。
在网站配置对话框中,指定主页面和错误页面。
点击保存。
请参阅问题排查,了解如何获取有关 Cloud Storage 浏览器中失败操作的详细错误信息。
gsutil
使用 gsutil web set
命令设置 MainPageSuffix
属性(通过 -m
标志)和 NotFoundPage
(通过 -e
标志):
gsutil web set -m index.html -e 404.html gs://www.example.com
如果成功,此命令会返回以下内容:
Setting website config on gs://www.example.com/...
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个
.json
文件,以将website
对象中的mainPageSuffix
和notFoundPage
属性设置为所需页面:{ "website":{ "mainPageSuffix": "index.html", "notFoundPage": "404.html" } }
使用
cURL
,通过PATCH
Bucket 请求调用 JSON API。对于 www.example.com:curl -X PATCH --data-binary @web-config.json \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/www.example.com"
XML API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个
.xml
文件,以将WebsiteConfiguration
元素中的MainPageSuffix
和NotFoundPage
元素设置为所需页面:<WebsiteConfiguration> <MainPageSuffix>index.html</MainPageSuffix> <NotFoundPage>404.html</NotFoundPage> </WebsiteConfiguration>
使用
cURL
,通过PUT
Bucket 请求和websiteConfig
查询字符串参数调用 XML API。对于 www.example.com:curl -X PUT --data-binary @web-config.xml \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ https://storage.googleapis.com/www.example.com?websiteConfig
设置负载平衡器和 SSL 证书
Cloud Storage 本身不支持使用 HTTPS 的自定义网域,因此您还需要设置一份 SSL 证书(该证书会附加到 HTTPS 负载平衡器),以通过 HTTPS 传送您的网站。本部分介绍了如何将您的存储分区添加到负载平衡器的后端,以及如何将新的 Google 管理的 SSL 证书添加到负载平衡器的前端。
- 转到 Google Cloud Console 中的“负载平衡”页面。
转到“负载平衡”页面 - 在 HTTP(S) 负载平衡下,点击开始配置。
- 选择从互联网到我的虚拟机,然后点击继续。
- 为您的负载平衡器指定一个名称,例如
example-lb
。
配置后端
- 点击后端配置。
- 在创建或选择后端服务和后端存储分区下拉列表中,转到后端存储分区子菜单,然后点击创建后端存储分区选项。
- 为后端存储分区选择一个名称,例如
example-bucket
。 - 点击 Cloud Storage 存储分区下的浏览。
- 选择
www.example.com
存储分区,然后点击选择。 - 点击创建。
配置主机规则和路径匹配器
主机规则和路径匹配器是外部 HTTP(S) 负载平衡器网址映射的配置组件。
- 点击主机和路径规则。
- 保留您之前创建的后端存储分区
example-bucket
的默认简单主机和路径规则的模式。
配置前端
本部分介绍了如何配置 HTTPS 协议和创建 SSL 证书。您还可以选择现有证书或上传自行管理的 SSL 证书。
- 点击前端配置。
配置以下字段的值:
对于 IP 地址字段:
- 在下拉列表中,点击创建 IP 地址。
- 在预留新的静态 IP 地址弹出式窗口中,输入
example-ip
作为 IP 地址的名称。 - 点击预留。
在端口中,选择 443。
在证书字段中,选择创建新证书。随即将在一个面板中显示证书创建表单。配置以下内容:
- 名称:
example-ssl
- 创建模式:创建 Google 代管的证书
- 网域:
www.example.com
。如果您希望通过其他网域(例如根网域example.com
)传送内容,请按 Enter 键将这些网域添加到其他行。每个证书的网域上限为 100 个。
- 名称:
点击创建。
点击完成。
检查配置
- 点击检查并最终确定。
- 检查后端配置、主机和路径规则和前端配置。
- 点击创建。
您可能需要等待几分钟才能创建负载平衡器。
将您的网域连接到负载平衡器
创建负载平衡器后,点击负载平衡器的名称:example-lb
。请注意与负载平衡器关联的 IP 地址:例如 30.90.80.100
。如需将您的网域指向负载平衡器,请使用您的网域注册服务创建 A
记录。如果您向 SSL 证书添加了多个网域,则必须为每个网域添加一条 A 记录,所有网域均指向负载平衡器的 IP 地址。例如,为 www.example.com
和 example.com
创建 A
记录:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如果您使用的是 Google Domains,请参阅创建 A
或 CNAME
记录了解详情。
推荐:监控 SSL 证书状态
Google Cloud 最长可能需要 60-90 分钟来预配证书并通过负载平衡器提供网站。如需监控您的证书状态,请执行以下操作:
控制台
- 转到 Google Cloud Console 中的“负载平衡”页面。
转到“负载平衡”页面 - 点击负载平衡器的名称:
example-lb
。 - 点击与负载平衡器关联的 SSL 证书的名称:
example-ssl
。 - 状态和网域状态行显示了证书状态。两行都必须处于活跃状态,才能使证书对您的网站有效。
gcloud
如需检查证书状态,请运行以下命令:
gcloud beta compute ssl-certificates describe certificate-name \ --global \ --format="get(name,managed.status)"
如需检查网域状态,请运行以下命令:
gcloud beta compute ssl-certificates describe certificate-name \ --global \ --format="get(managed.domainStatus)"
如需详细了解证书状态,请参阅排查 SSL 证书问题。
测试网站
SSL 证书生效后,请转到 https://www.example.com/test.html
(其中 test.html
是存储在名为 www.example.com
的存储分区中的对象),验证是否已从存储分区传送内容。如果您设置了 MainPageSuffix
属性,则 https://www.example.com
会转到 index.html
。
清理
学完“托管静态网站”教程后,您可以清理在 Google Cloud 上创建的资源,以避免这些资源占用配额,日后产生费用。以下部分介绍如何删除或关闭这些资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
删除负载平衡器和存储分区
如果您不想删除整个项目,请删除为教程创建的负载平衡器和存储分区:
- 转到 Google Cloud Console 中的“负载平衡”页面。
转到“负载平衡”页面 - 选中
example-lb
旁边的复选框。 - 点击删除。
- (可选)选中您要删除的资源以及负载平衡器(例如
www.example.com
存储分区或example-ssl
SSL 证书)旁边的复选框。 - 点击删除负载平衡器或删除负载平衡器和所选的资源。
后续步骤
- 了解如何通过 HTTP 传送静态网站内容。
- 查看关于使用存储分区托管静态网站的示例和提示。
- 访问关于托管静态网站的问题排查部分。
- 了解如何托管动态网站的静态资源。
- 了解其他 Google Cloud Web 传送解决方案。
- 试用使用 Cloud Storage 的其他 Google Cloud 教程。
亲自尝试
如果您是 Google Cloud 新手,请创建一个帐号来评估 Cloud Storage 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
免费试用 Cloud Storage