本頁面說明如何設定 Cloud Storage bucket,託管自有網域的靜態網站。靜態網頁可能會運用到 HTML、CSS 和 JavaScript 等用戶端技術,不得包含動態內容,例如 PHP 等伺服器端指令碼。
總覽
由於 Cloud Storage 本身不支援使用 HTTPS 的自訂網域,本教學課程會搭配外部應用程式負載平衡器使用 Cloud Storage,透過 HTTPS 從自訂網域提供內容。如要瞭解如何透過 HTTPS 從自訂網域提供內容,請參閱「HTTPS 服務疑難排解」。您也可以使用 Cloud Storage 透過 HTTP 提供自訂網域內容,這不需要負載平衡器。
如需靜態網頁的範例和提示,包括如何託管動態網站的靜態資產,請參閱「靜態網站」頁面。
本教學課程的操作說明將說明如何執行下列步驟:
上傳及分享您網站的檔案。
設定負載平衡器和 SSL 憑證。
將負載平衡器連結至 bucket。
使用
A記錄將網域指向負載平衡器。測試網站。
定價
本教學課程的指示使用下列Google Cloud計費元件:
如要瞭解託管靜態網站時可能產生的費用,請參閱「監控費用」提示。
存取 bucket 資料
您可以使用物件可供大眾讀取的值區,託管靜態網站。如要使用 Cloud Storage 託管靜態網站,可以採用下列任一方法:
建立新的 bucket,並允許公開存取其中的資料。建立 bucket 時,取消勾選標示為「強制禁止公開存取這個 bucket」的方塊。這樣做會停用 bucket 的公開存取防護功能。建立 bucket 後,請將「Storage 物件檢視者」角色授予
allUsers主體。詳情請參閱「建立 bucket」。將現有 bucket 的資料設為公開。詳情請參閱「共用檔案」。
建立私人 bucket 做為後端,透過 Cloud Load Balancing 和 Cloud CDN 提供內容。詳情請參閱「全域外部應用程式負載平衡器的私人儲存空間存取權」、「傳統版應用程式負載平衡器的私人儲存空間存取權」和「Cloud CDN 的私人儲存空間存取權」。
本教學課程的操作說明會示範如何公開現有 bucket 的資料。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自體驗產品的實際應用成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- 為專案啟用 Compute Engine API。
- 具備下列 Identity and Access Management 角色:Storage 管理員和Compute 網路管理員。
- 有一個由您擁有或管理的網域。如果您還沒有網域,可以透過許多服務註冊新網域,例如 Cloud Domains。
本教學課程使用的網域為
example.com。 - 您有幾個要放送的網站檔案。如要充分發揮本教學課程的效果,建議您至少準備一個索引頁面 (
index.html) 和一個 404 頁面 (404.html)。 - 擁有 Cloud Storage bucket,用於儲存要提供的檔案。如果目前沒有 bucket,請建立 bucket。
- (選用) 如要讓 Cloud Storage bucket 與網域同名,請驗證您擁有或管理要使用的網域。請確認您驗證的是頂層網域 (例如
example.com),而非子網域 (例如www.example.com)。如果您是透過 Cloud Domains 購買網域,系統會自動驗證。
上傳網站檔案
將網站要提供的檔案新增至 bucket:
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,按一下您建立的 bucket 名稱。
「Bucket details」(bucket 詳細資料) 頁面隨即開啟,並選取「Objects」(物件) 分頁標籤。
按一下「上傳檔案」按鈕。
在檔案對話方塊中,找出並選取您需要的檔案。
上傳完畢後,bucket 中應該會顯示檔案名稱和檔案資訊。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」一文。
指令列
使用 gcloud storage cp 指令將檔案複製到 bucket。
舉例來說,如要將檔案 index.html 從目前位置 Desktop 複製到 bucket my-static-assets,請執行下列指令:
gcloud storage cp Desktop/index.html gs://my-static-assets
如果成功,回應會類似以下範例:
Completed files 1/1 | 164.3kiB/164.3kiB
用戶端程式庫
C++
詳情請參閱「Cloud Storage C++ API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱「Cloud Storage C# API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱「Cloud Storage Go API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
以下範例會上傳個別物件:
下列範例會同時上傳多個物件:
以下範例會同時上傳具有相同前置字串的所有物件:
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
以下範例會上傳個別物件:
下列範例會同時上傳多個物件:
以下範例會同時上傳具有相同前置字串的所有物件:
PHP
詳情請參閱 Cloud Storage PHP API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
以下範例會上傳個別物件:
下列範例會同時上傳多個物件:
下列範例會同時上傳具有共同前置字串的所有物件:
Ruby
詳情請參閱「Cloud Storage Ruby API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Rust
Terraform
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL透過POST物件要求呼叫 JSON API。針對上傳至 bucketmy-static-assets的檔案index.html:curl -X POST --data-binary @index.html \ -H "Content-Type: text/html" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/upload/storage/v1/b/my-static-assets/o?uploadType=media&name=index.html"
XML API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL呼叫 XML API,並傳送PUT物件要求。針對上傳至名為my-static-assets的 bucket 的index.html檔案:curl -X PUT --data-binary @index.html \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: text/html" \ "https://storage.googleapis.com/my-static-assets/index.html"
分享檔案
如要讓公開網際網路上的所有人都能讀取 bucket 中的所有物件,請按照下列步驟操作:
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選要公開的 bucket 名稱。
選取靠近頁面上方的 [Permissions] (權限) 分頁標籤。
如果「公開存取」窗格顯示「非公開」,請點選標示為「移除『不可公開存取』限制」的按鈕,然後在隨即顯示的對話方塊中點選「確認」。
按一下 add_box「Grant access」(授予存取權) 按鈕。
畫面上會顯示「Add principals」(新增主體) 對話方塊。
在「New principals」(新增主體) 欄位中輸入
allUsers。在「選取角色」下拉式選單中,選取「Cloud Storage」子選單,然後按一下「Storage 物件檢視者」選項。
按一下 [儲存]。
點選「允許公開存取」。
公開分享後,每個物件的「公開存取權」欄都會顯示連結圖示。按一下這個圖示即可取得物件的網址。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」。
指令列
使用 buckets add-iam-policy-binding 指令:
gcloud storage buckets add-iam-policy-binding gs://my-static-assets --member=allUsers --role=roles/storage.objectViewer
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱「Cloud Storage C# API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱「Cloud Storage PHP API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Rust
Terraform
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。建立包含下列資訊的 JSON 檔案:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL來透過PUT值區要求呼叫 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME是您在步驟 2 建立的 JSON 檔案路徑。BUCKET_NAME是要公開物件的 bucket 名稱。例如:my-static-assets。
XML API
XML API 不支援將 bucket 中的所有物件設為可公開讀取。請改用 Google Cloud 控制台或 gcloud storage,或為每個物件設定 ACL。請注意,如要為個別物件設定 ACL,必須將 bucket 的「存取控管」模式切換為「精細」。
如要透過 Cloud Load Balancing 和 Cloud CDN 提供內容,也可以公開存取部分 bucket,或使用私人 bucket 做為後端。
如果訪客要求的網址指向非公開或不存在的檔案,就會收到 http 403 回應代碼。如要瞭解如何新增使用 http 404 回應代碼的錯誤頁面,請參閱下一節。
建議做法:指派特殊頁面
您可以指派索引頁面後置字串和自訂錯誤頁面,這類頁面稱為特殊頁面。您可以選擇是否指派這兩項設定,但如果未指派索引頁面後置字串並上傳對應的索引頁面,存取頂層網站的使用者會看到 XML 文件樹狀結構,其中包含 bucket 中的公開物件清單。
如要進一步瞭解特殊頁面的行為,請參閱「特殊頁面」。
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在值區清單中,找到您建立的值區。
按一下與 bucket 相關聯的「Bucket overflow」選單 (more_vert),然後選取「Edit website configuration」(編輯網站設定)。
在網站設定對話方塊中,指定主頁面和錯誤頁面。
按一下 [儲存]。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」一文。
指令列
使用 buckets update 指令,並加上 --web-main-page-suffix 和 --web-error-page 旗標。
在以下範例中,MainPageSuffix 設為 index.html,NotFoundPage 設為 404.html:
gcloud storage buckets update gs://my-static-assets --web-main-page-suffix=index.html --web-error-page=404.html
如果執行成功,指令會傳回下列內容:
Updating gs://www.example.com/... Completed 1
用戶端程式庫
C++
詳情請參閱「Cloud Storage C++ API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱「Cloud Storage C# API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱「Cloud Storage PHP API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Rust
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。建立 JSON 檔案,將
website物件中的mainPageSuffix和notFoundPage屬性設為所需頁面。在以下範例中,
mainPageSuffix設為index.html,notFoundPage設為404.html:{ "website":{ "mainPageSuffix": "index.html", "notFoundPage": "404.html" } }
使用
cURL搭配PATCHBucket 要求呼叫 JSON API。針對 bucketmy-static-assets:curl -X PATCH --data-binary @web-config.json \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/my-static-assets"
XML API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。建立 XML 檔案,將
WebsiteConfiguration元素中的MainPageSuffix和NotFoundPage元素設為所需頁面。在以下範例中,
MainPageSuffix設為index.html,NotFoundPage設為404.html:<WebsiteConfiguration> <MainPageSuffix>index.html</MainPageSuffix> <NotFoundPage>404.html</NotFoundPage> </WebsiteConfiguration>
使用
cURL呼叫 XML API,並搭配PUTBucket 要求和websiteConfig查詢字串參數。針對my-static-assets:curl -X PUT --data-binary @web-config.xml \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/my-static-assets?websiteConfig
設定負載平衡器和 SSL 憑證
Cloud Storage 本身不支援使用 HTTPS 的自訂網域,因此您也需要設定附加至 HTTPS 負載平衡器的 SSL 憑證,才能透過 HTTPS 提供網站。本節說明如何將 bucket 新增至負載平衡器的後端,以及如何將新的 Google 代管 SSL 憑證新增至負載平衡器的前端。
選取負載平衡器類型
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 按一下「Create load balancer」(建立負載平衡器)。
- 將「Type of load balancer」(負載平衡器類型) 設為「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後按一下「Next」(下一步)。
- 按一下 [設定]。
系統會顯示負載平衡器的設定視窗。
基本設定
繼續設定之前,請先輸入負載平衡器名稱,例如 example-lb。
設定前端
本節說明如何設定 HTTPS 通訊協定及建立 SSL 憑證。您也可以選取現有憑證,或上傳自行管理的 SSL 憑證。
- 點選「前端設定」。
- (選用) 為前端設定命名。
- 在「Protocol」(通訊協定) 部分,選取「HTTPS (includes HTTP/2)」(HTTPS (含 HTTP/2))。
- 在「IP version」(IP 版本) 部分,選取「IPv4」。如要使用 IPv6,請參閱「IPv6 終止」一文。
在「IP address」(IP 位址) 欄位中:
- 在下拉式選單中,點選「建立 IP 位址」。
- 在「Reserve a new static IP address」(保留新的靜態 IP 位址) 對話方塊中,輸入 IP 位址的「Name」(名稱),例如
example-ip。 - 點選「保留」。
在「通訊埠」部分,選取「443」。
在「Certificate」(憑證) 欄位下拉式選單中,選取「Create a new certificate」(建立新憑證)。面板會顯示憑證建立表單。設定下列項目:
點選「建立」。
(選用) 如要 Google Cloud 自動設定部分 HTTP 負載平衡器,以便重新導向 HTTP 流量,請勾選「Enable HTTP to HTTPS redirect」(啟用從 HTTP 重新導向至 HTTPS 的功能) 旁的核取方塊。
按一下「完成」。
設定後端
- 按一下「後端設定」。
- 在「Backend services & backend buckets」(後端服務和後端 bucket) 下拉式選單中,點選「Create a backend bucket」(建立後端 bucket)。
- 選擇「後端 bucket 名稱」,例如
example-bucket。您選擇的名稱可以與先前建立的 bucket 名稱不同。 - 在「Cloud Storage bucket」欄位中,按一下「瀏覽」。
- 選取您先前建立的
my-static-assetsbucket,然後按一下「Select」(選取)。 - (選用) 如要使用 Cloud CDN,請選取「Enable Cloud CDN」(啟用 Cloud CDN) 核取方塊,並視需要設定 Cloud CDN。請注意,Cloud CDN 可能會產生額外費用。
- 點選「建立」。
設定轉送規則
轉送規則是外部應用程式負載平衡器網址對應的元件。在本教學課程中,請略過這部分的負載平衡器設定,因為系統會自動設為使用您剛才設定的後端。
檢查設定
- 點選「檢查並完成」。
- 檢查「Frontend」(前端)、「Routing rules」(轉送規則) 和「Backend」(後端)。
- 點選「建立」。
負載平衡器可能需要幾分鐘才能建立完成。
將網域連結至負載平衡器
負載平衡器建立完成後,請按一下負載平衡器的名稱: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
如要進一步瞭解如何將網域連結至負載平衡器,請參閱「排解網域狀態問題」。
建議:監控 SSL 憑證狀態
Google Cloud 最多可能需要 60 到 90 分鐘,才能佈建憑證並透過負載平衡器提供網站。如要監控憑證狀態,請按照下列步驟操作:
控制台
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
前往「Load balancing」(負載平衡) - 按一下負載平衡器的名稱:
example-lb。 - 按一下與負載平衡器相關聯的 SSL 憑證名稱:
example-ssl。 - 「狀態」和「網域狀態」列會顯示憑證狀態。兩者都必須啟用,憑證才能在網站上生效。
指令列
如要檢查憑證狀態,請執行下列指令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(name,managed.status)"
如要檢查網域狀態,請執行下列指令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(managed.domainStatus)"
如要進一步瞭解憑證狀態,請參閱「排解 SSL 憑證相關問題」。
測試網站
SSL 憑證啟用後,請前往 https://www.example.com/test.html,確認內容是由 bucket 提供,其中 test.html 是儲存在您做為後端使用的 bucket 中的物件。如果設定 MainPageSuffix 屬性,https://www.example.com 會前往 index.html。
清除所用資源
完成教學課程後,您可以清理所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
刪除專案的方法如下:
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除負載平衡器和 bucket
如果不想刪除整個專案,請刪除您為本教學課程建立的負載平衡器和 bucket:
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
前往「Load balancing」(負載平衡) - 勾選
example-lb旁的核取方塊。 - 點選「刪除」。
- (選用) 勾選要與負載平衡器一併刪除的資源旁的核取方塊,例如
my-static-assetsbucket 或example-sslSSL 憑證。 - 按一下「刪除負載平衡器」或「刪除負載平衡器和所選資源」。
釋出預留的 IP 位址
如要刪除本教學課程使用的預留 IP 位址,請按照下列步驟操作:
前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
勾選「
example-ip」旁的核取方塊。按一下「釋出靜態位址」。
按一下確認視窗中的 [Delete]。
後續步驟
- 請參閱使用 bucket 託管靜態網站的範例和提示。
- 請參閱這篇文章,瞭解如何排解靜態網站的代管問題。
- 瞭解如何託管動態網站的靜態素材資源。
- 瞭解其他 Google Cloud 網頁放送解決方案。
歡迎試用
如果您未曾使用過 Google Cloud,歡迎建立帳戶,親自體驗實際使用 Cloud Storage 平台的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
免費試用 Cloud Storage