要求的轉送方式

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。此代碼不對應至國家/地區或省份,即使部分區域 ID 可能與常用的國家/地區和省份代碼相似。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r��如果是這段時間前建立的現有應用程式,網址可選擇是否包含地區 ID。

進一步瞭解區域 ID

本頁面說明使用者發出的 HTTP 要求如何送達適當的服務版本。您可以透過下列方式轉送要求:

如果您使用本機開發伺服器來測試應用程式,則可用的轉送和分派功能會略有不同。如要透過程式建立實際工作環境和開發伺服器都能使用的網址,請使用 get_hostname 方法。

詳情請參閱在開發伺服器中轉送

使用網址進行轉送

應用程式在 App Engine 中執行後,您可以使用下列網址將 HTTP 要求傳送至應用程式:
https://PROJECT_ID.REGION_ID.r.appspot.com

其中 PROJECT_ID 是包含應用程式的 Google Cloud 專案 ID。

這個網址會將要求傳送至應用程式的預設服務,以及您設定用來接收流量的版本。

服務和版本的網址

如果您在應用程式中建立多項服務,每項服務都會有專屬網址。服務的每個版本也都有自己的網址,因此您可以先部署及測試新版本,再將該版本設定為接收流量。

特定服務和版本的網址格式如下:

VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

如不需要指定特定版本,可以省略 VERSION-dot-

如要擷取應用程式服務和版本的 ID,可以使用下列任一工具:

控制台

在 Google Cloud 控制台中,您可以查看���應的「Instances」(執行個體)、「Services」(服務) 和「Versions」(版本) 頁面。

gcloud

執行 gcloud app instances list 指令,即可列出特定 Google Cloud 專案中的資源 ID。

API

如要透過程式擷取資源 ID,請參閱 Admin API 中的 list 方法

網址範例

以下是 App Engine 的網址範例,顯示 App Engine 指派給應用程式的 appspot.com 網域,以及您可為應用程式設定的自訂網域

  • 將要求傳送至 default 服務的可用執行個體:
    https://PROJECT_ID.REGION_ID.r.appspot.com
    https://CUSTOM_DOMAIN

    要求會由 default 服務中設定用來處理流量的版本接收。

  • 將要求傳送至特定服務的可用執行個體:
    https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com
    https://SERVICE_ID.CUSTOM_DOMAIN

    要求會由指定服務中設定要用來處理流量的版本接收。如果您指定的服務不存在,則系統會以軟轉送的方式處理這些要求。

  • 將要求傳送至
    default 中特定版本的可用執行個體:
    https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com
    https://VERSION_ID.CUSTOM_DOMAIN

    如果沒有指定服務,要求會傳送至 default 服務。

軟轉送

如果要求符合主機名稱的 PROJECT_ID.REGION_ID.r.appspot.com 部分,但含有不存在的服務、版本或執行個體名稱,則要求會轉送至 default 服務。軟轉送不適用於自訂網域;如果主機名稱無效,則傳送至這些網域的要求將傳回 HTTP 404 狀態碼。

指定的轉送

如果目標確實存在,採用下列網址模式可保證將要求送達要求目標。您在分派檔案中定義的模式絕不會攔截和重新轉送這些要求:

  • 將要求傳送到特定服務和版本的可用執行個體:
    https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com
    https://VERSION_ID.SERVICE_ID.PROJECT_ID.CUSTOM_DOMAIN
  • 如果您使用手動調整資源配置的服務,則可以加入執行個體 ID 來指定執行個體並傳送要求。執行個體 ID 為 0 到運作中執行個體總數之間的整數,可以按照下列方式指定:

    將要求傳送至特定執行個體中的特定服務和版本:

    https://INSTANCE_ID-dot-VERSION_ID-dot-SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com
    https://INSTANCE_ID.VERSION_ID.SERVICE_ID.CUSTOM_DOMAIN

使用分派檔案設定轉送

您可以建立分派檔案,覆寫 App Engine 的網址轉送規則,並定義自己的自訂轉送規則。分派檔案可以讓您根據要求網址中的路徑或主機名稱,將傳入要求傳送至特定服務。

建立分派檔案

如何建立分派檔案:

  1. 在專案目錄的根目錄,或 default 服務的根目錄中,建立名為 dispatch.yaml 的檔案。

  2. 請按照參考資料dispatch.yaml的說明,在檔案中定義轉送規則。

請注意下列轉送規則的相關事項:

  • 您最多可以定義 20 項轉送規則,每條規則都必須包含 urlservice 元素。
  • 規則必須使用 HTTP 網址模式,這類模式包含分隔子網域的「.」標記法。系統不支援使用 HTTPS「-dot-」標記法定義的網址。
  • 這些規則也適用於您在 Cron 檔案中定義的網址。

舉例來說,您可以建立分派檔案,藉此將行動要求 (例如 https://simple-sample.uc.r.appspot.com/mobile/) 轉送至行動裝置前端,並將工作站要求 (例如 https://simple-sample.uc.r.appspot.com/work/) 轉送至靜態後端:

dispatch:
  # Send all mobile traffic to the mobile frontend.
  - url: "*/mobile/*"
    service: mobile-frontend

  # Send all work to the one static backend.
  - url: "*/work/*"
    service: static-backend

部署分派檔案

如要部署分派檔案,請執行下列指令:

    gcloud app deploy dispatch.yaml

使用 Cloud Load Balancing 進行路由

Cloud Load Balancing 是獨立產品,可為在 Google Cloud上執行的所有應用程式啟用進階網路設定。

為無伺服器應用程式啟用 HTTP(S) 負載平衡後,您可以:

  • 設定無伺服器應用程式,從專屬 IPv4 和/或 IPv6 IP 位址提供服務,該位址不會與其他服務共用。

  • 重複使用您用於 Compute Engine、Google Kubernetes Engine 和 Cloud Storage 的 SSL 憑證和私密金鑰。這樣一來,就不必為無伺服器應用程式管理個別憑證。

負載平衡器不會干擾或與 dispatch.yaml 檔案中的路由規則互動。無伺服器 NEG 將流量導向 App Engine 後,系統才會評估 dispatch.yaml 規則。

注意事項:

  • 建議您使用 Ingress 控制項,確保應用程式只會接收負載��衡器 (以及您使用的 VPC) 傳送的要求。否則,使用者可以透過應用程式的 App Engine 網址略過負載平衡器、Cloud Armor 安全性政策、SSL 憑證,以及透過負載平衡器傳遞的私密金鑰。

在開發伺服器中轉送

探索執行個體位址

本機開發伺服器會在啟動時建立所有手動調整資源配置的執行個體,並對自動調整和基本資源配置服務的執行個體採取動態管理。伺服器會為各項服務指派通訊埠,用戶端則能使用伺服器自動平衡負載及選取執行個體。為各項服務定址的通訊埠指派工作會顯示在伺服器記錄檔訊息串中。以下是定義三種服務的應用程式使用的通訊埠 (與每項服務的資源調度類型無關):

INFO Starting module "default" running at: http://localhost:8084
INFO Starting module "service1" running at: http://localhost:8082
INFO Starting module "service2" running at: http://localhost:8083

當您使用服務的位址 (例如 http://localhost:8082/) 時,伺服器會選取 (或建立) 服務的執行個體,並將要求傳送至該執行個體。

伺服器會為服務的各個執行個體指派專屬的通訊埠,如要探索這些通訊埠,您必須使用管理伺服器。管理伺服器有一個不重複的通訊埠,這個通訊埠記載於訊息記錄中:

INFO Starting admin server at: http://localhost:8000

這個位址會將您帶往管理伺服器主控台。您可以在主控台中按一下 [Instances] (執行個體),查看應用程式執行個體的動態狀態:

dev_appserver 管理控制台的螢幕擷圖

每個手動和基本執行個體會以不同的項目顯示。執行個體編號是一種連結,可連至每個執行個體的不重複通訊埠位址。您可以將游標懸停在連結上,查看指派給這個執行個體的通訊埠,或按一下連結,將要求直接傳送給這個執行個體。

分派檔案

如果您的應用程式含有 dispatch.yaml 檔案,記錄檔訊息串中就會顯示分派器通訊埠:

INFO Starting dispatcher running at: http://localhost:8080

系統會���據分派檔案中的���則,轉送傳送至這個通訊埠的要求。伺服器不支援含有主機名稱 (例如 url: "customer1.myapp.com/*") 的 dispatch.yaml 檔案規則。具有相對路徑模式 (url: "*/fun") 的規則可正常運作,因此您可以使用類似 http://localhost/fun/mobile 的網址來連線至執行個體。如果您嘗試使用含有主機規則的 dispatch.yaml 檔案啟動應用程式,伺服器將在記錄檔串中回報錯誤。

限制服務的存取權

所有服務均預設為公開。如要限制服務的存取權,請在其處理常式中加入 login: admin 元素。

App Engine 網址的其他詳細資料

瞭解網址中的區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。此代碼不對應至國家/地區或省份,即使部分區域 ID 可能與常用的國家/地區和省份代碼相似。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是這段時間前建立的現有應用程式,網址可選擇是否包含地區 ID。

您可以使用下列工具查看應用程式的區域 ID:

控制台

在 Google Cloud 控制台中,您可以查看應用程式的「Instances」(執行個體)、「Services」(服務) 和「Versions」(版本) 網址。

所有這些網址都包含區域 ID。

gcloud

部署應用程式或服務時,gcloud app deploy 指令會在部署成功後顯示網址。這個網址包含區域 ID。

如要查看已部署服務的網址,請按照下列步驟操作:

  1. 輸入 gcloud app versions list 指令,列出特定服務的版本。舉例來說,如要列出預設服務的版本,請輸入 gcloud app versions list --service=default

  2. 輸入 gcloud app versions describe 指令。該指令的輸出內容包含版本網址和應用程式的區域 ID。舉例來說,如要說明預設服務的 20191023t101741 版本,請輸入 gcloud app versions describe 20191023t101741 --service=default

要求資料中包含網域名稱

用於要求的網域名稱會包含在傳送至應用程式的要求資料中。因此,您可以使用要求資料來控制應用程式如何根據要求中的網域名稱做出回應。舉例來說,如果您想要重新導向到官方網域,可以撰寫應用程式的程式碼來檢查 Host 要求標頭,然後根據網域名稱提供適當的回應。