設定路由器的 I/O 逾時

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

本文說明如何在 Apigee Edge 的路由器上設定 I/O 超時。

路由器上的 I/O 逾時代表路由器在建立連線並將要求傳送至訊息處理器後,等待接收訊息處理器回應的時間。Router 的預設 I/O 逾時值為 57 秒。

您可以視需求,將 Router 的 I/O 超時時間調高或調低,預設值為 57 秒。設定方式如下:

  • 在虛擬主機中
  • 在路由器上

下列屬性可控制路由器上的 I/O 逾時:

資源名稱 位置 說明
proxy_read_timeout 虛擬主機

指定路由器在建立連線並將要求傳送至訊息處理器後,等待訊息處理器回應的最長時間。

如果在逾時期間內,訊息處理器沒有回應,路由器就會逾時。

根據預設,這項屬性會採用在 Router 上為 conf_load_balancing_load.balancing.driver.proxy.read.timeout 屬性設定的值。預設值為 57 秒

如果為特定虛擬主機修改這個屬性,並設定新的逾時值,則只有使用該特定虛擬主機的 API Proxy 會受到影響。

conf_load_balancing_load.balancing.driver.proxy.read.timeout 路由器

指定路由器在建立連線並將要求傳送至訊息處理器後,等待訊息處理器回應的最長時間。

如果在逾時期間內,訊息處理器沒有回應,路由器就會逾時。

這個屬性會用於這個路由器上的所有虛擬主機。

此屬性的預設值為 57 秒

您可以按照下文「在路由器上設定 I/O 逾時」一節的說明修改這項屬性,也可以在虛擬主機層級設定 proxy_read_timeout 屬性,覆寫這個值。

您可以使用下列標記,將這個屬性的時間間隔設為秒以外的值:

ms: milliseconds
s:  seconds (default)
m:  minutes
h:  hours
d:  days
w:  weeks
M:  months (length of 30 days)
y:  years (length of 365 days)
conf_load_balancing_load.balancing.driver.nginx.upstream_next_timeout 路由器

指定路由器在建立連線並將要求傳送至每個訊息處理器後,等待所有訊息處理器傳回回應的總時間。

如果 Edge 安裝作業有多個訊息處理器,且發生錯誤時已啟用重試功能,就適用這項做法。值為下列其中一個:

  • conf_load_balancing_load.balancing.driver.proxy.read.timeout 的目前值
  • 預設值為 57 秒

conf_load_balancing_load.balancing.driver.proxy.read.timeout 屬性相同,您可以指定預設 (秒) 以外的時間間隔。

事前準備

使用本文中的步驟前,請務必瞭解下列主題:

在虛擬主機中設定 I/O 逾時

本節說明如何在與機構和環境相關聯的虛擬主機中設定 I/O 逾時。您可以在虛擬主機中透過 proxy_read_timeout 屬性設定 I/O 逾時,這個屬性代表以秒為單位的 I/O 逾時值。

您可以透過下列任一方法設定虛擬主機:

  • Edge UI
  • Edge API

Edge UI

如要使用 Edge UI 設定虛擬主機,請按照下列步驟操作:

  1. 登入 Edge UI
  2. 依序前往「管理」>「虛擬主機」
  3. 選取要進行這項變更的特定環境
  4. 選取要設定新 I/O 逾時值的特定虛擬主機。
  5. 在「屬性」下方,以秒為單位更新「Proxy Read Timeout」(Proxy 讀取逾時) 值。

    舉例來說,如要將逾時時間變更為 120 秒,請輸入 120,如下圖所示:

    Proxy 讀取逾時值為 120

  6. 儲存變更。

Edge API

如要使用 Edge API 設定虛擬主機,請按照下列步驟操作:

  1. 使用 取得虛擬主機 API 取得目前的虛擬主機設定,如下所示:

    公有雲使用者

    curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/{organization-name}/environments/{environment-name}/virtualhosts/{virtualhost-name} -u <username>
                    

    Private Cloud 使用者

    curl -v -X GET http://<management-host>:<port #>/v1/organizations/{organization-name}/environments/{environment-name}/virtualhosts/{virtualhost-name} -u <username>
                    

    其中:

    {organization-name} 是機構名稱

    {environment-name} 是環境的名稱

    {virtualhost-name} 是虛擬主機的名稱

    虛擬主機設定範例

        {
          "hostAliases": [
            "api.myCompany,com"
          ],
          "interfaces": [],
          "listenOptions": [],
          "name": "secure",
          "port": "443",
          "retryOptions": [],
          "sSLInfo": {
            "ciphers": [],
            "clientAuthEnabled": "false",
            "enabled": "true",
            "ignoreValidationErrors": false,
            "keyAlias": "myCompanyKeyAlias",
            "keyStore": "ref://myCompanyKeystoreref",
            "protocols": []
          },
          "useBuiltInFreeTrialCert": false
        }
  2. 在現有的虛擬主機設定中新增 proxy_read_timeout 屬性, 並在 properties 下方新增 JSON 酬載,值以秒為單位。

    舉例來說,如要將 I/O 逾時時間變更為 120 秒,請新增 properties 程式碼區塊,如下所示:

    更新的虛擬主機設定範例

    {
      "hostAliases": [
        "api.myCompany,com",
      ],
      "interfaces": [],
      "listenOptions": [],
      "name": "secure",
      "port": "443",
      "retryOptions": [],
      "properties": {
        "property": [
          {
            "name": "proxy_read_timeout",
            "value": "120"
          }
        ]
      },
      "sSLInfo": {
        "ciphers": [],
        "clientAuthEnabled": "false",
        "enabled": "true",
        "ignoreValidationErrors": false,
        "keyAlias": "myCompanyKeyAlias",
        "keyStore": "ref://myCompanyKeystoreref",
        "protocols": []
      },
      "useBuiltInFreeTrialCert": false
    }
  3. 將更新後的虛擬主機設定儲存至檔案。例如:virtualhost-payload.json
  4. 使用「Update a virtual host」(更新虛擬主機) API,以變更更新 virtualhost 設定,如下所示:

    公有雲使用者

    curl -v -X POST Content-Type: application/json
    https://api.enterprise.apigee.com/v1/organizations/{organization-name}/environments/{environment-name}/virtualhosts/{virtualhost-name} -d @virtualhost-payload.json -u <username>
                

    Private Cloud 使用者

    curl -v -X POST Content-Type: application/json
    http://<management-host>:<port #>/v1/organizations/{organization-name}/environments/{environment-name}/virtualhosts/{virtualhost-name} -d @virtualhost-payload.json -u <username>
                

    其中:

    {organization-name} 是機構名稱

    {environment-name} 是環境的名稱

    {virtualhost-name} 是虛擬主機的名稱

驗證虛擬主機上的 I/O 逾時

本節說明如何使用 Edge API,確認虛擬主機上的 I/O 逾時已成功修改。

  1. 執行「Get virtual host」API,取得 virtualhost 設定,如下所示:

    公有雲使用者

    curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/{organization-name}/environments/{environment-name}/virtualhosts/{virtualhost-name} -u <username>
                  

    Private Cloud 使用者

    curl -v -X GET http://<management server-host>:<port #>/v1/organizations/{organization-name}/environments/{environment-name}/virtualhosts/{virtualhost-name} -u <username>
                  

    其中:

    {organization-name} 是機構名稱

    {environment-name} 是環境的名稱

    {virtualhost-name} 是虛擬主機的名稱

  2. 確認屬性 proxy_read_timeout 已設為新值。

    更新的虛擬主機設定範例

    {
      "hostAliases": [
        "api.myCompany,com",
      ],
      "interfaces": [],
      "listenOptions": [],
      "name": "secure",
      "port": "443",
      "retryOptions": [],
      "properties": {
        "property": [
          {
            "name": "proxy_read_timeout",
            "value": "120"
          }
        ]
      },
      "sSLInfo": {
        "ciphers": [],
        "clientAuthEnabled": "false",
        "enabled": "true",
        "ignoreValidationErrors": false,
        "keyAlias": "myCompanyKeyAlias",
        "keyStore": "ref://myCompanyKeystoreref",
        "protocols": []
      },
      "useBuiltInFreeTrialCert": false
    }

    在上述範例中,請注意 proxy_read_timeout 已設定為 120 秒的新值。

  3. 如果 proxy_read_timeout, 仍顯示舊值,請確認您已正確按照「在虛擬主機中設定 I/O 逾時」一文中的所有步驟操作。如果遺漏任何步驟,請再次正確執行所有步驟。
  4. 如果仍無法修改 I/O 超時,請與 Apigee Edge 支援團隊聯絡。

在路由器上設定 I/O 逾時

本節說明如何在路由器上設定 I/O 逾時。您可以透過 Router 屬性 conf_load_balancing_load.balancing.driver.proxy.read.timeout 設定 I/O 逾時,這個屬性代表以秒為單位的 I/O 逾時值。

如要在路由器上設定 I/O 逾時,請按照下列步驟操作:

  1. 在路由器電腦上,使用編輯器開啟下列檔案。如果不存在,請建立該檔案。
    /opt/apigee/customer/application/router.properties

    舉例來說,如要使用 vi 開啟檔案,請輸入下列指令:

    vi /opt/apigee/customer/application/router.properties
  2. properties 檔案中新增一行,格式如下,並將 time_in_seconds 替換為值:
  3. conf_load_balancing_load.balancing.driver.proxy.read.timeout=time_in_seconds

    舉例來說,如要將路由器 的 I/O 逾時時間變更為 120 秒,請新增下列程式碼:

    conf_load_balancing_load.balancing.driver.proxy.read.timeout=120

    您也可以修改 I/O 超時時間 (以分鐘為單位)。舉例來說,如要將逾時時間變更為兩分鐘,請新增下列程式碼:

    conf_load_balancing_load.balancing.driver.proxy.read.timeout=2m
  4. 儲存變更。
  5. 請確認這個屬性檔案是由 apigee 使用者擁有,如下所示:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  6. 如下所示重新啟動路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  7. 如果你有多個路由器,請在所有路由器上重複上述步驟。

驗證路由器上的 I/O 超時

本節說明如何確認路由器上的 I/O 逾時已成功修改。

即使您使用權杖 conf_load_balancing_load.balancing.driver.proxy.read.timeout 在 Router 上設定 I/O 超時,仍須確認實際屬性 proxy_read_timeout 是否已設為新值。

  1. /opt/nginx/conf.d 目錄中搜尋 proxy_read_timeout 屬性,並檢查是否已設定新值,如下所示:
    grep -ri "proxy_read_timeout" /opt/nginx/conf.d
  2. 如果路由器成功設定新的 I/O 逾時值,上述指令會在所有虛擬主機設定檔中顯示新值。

    以下是 I/O 逾時為 120 秒時,上述 grep 指令的範例結果:

    /opt/nginx/conf.d/0-default.conf:proxy_read_timeout 120;
    /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;

    在上述範例輸出中,請注意,屬性 proxy_read_timeout 已在 0-default.conf 中設為新值 120,這是預設虛擬主機的設定檔。這表示路由器上的 I/O 超時已成功設定為 120 秒。

  3. 如果屬性 proxy_read_timeout 仍顯示舊值,請確認您已正確按照「在路由器上設定 I/O 逾時」一文中的所有步驟操作。如果遺漏任何步驟,請再次正確執行所有步驟。
  4. 如果仍無法修改 I/O 超時,請與 Apigee Edge 支援團隊聯絡。

後續步驟

瞭解如何在訊息處理器中設定 I/O 逾時