設定路由器的 I/O 逾時

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

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

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

您可以視需求增加或減少路由器的 I/O 逾時時間 (預設值為 57 秒)。您可以用以下方式設定:

  • 在虛擬主機中
  • 路由器

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

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

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

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

根據預設,此屬性會採用路由器上 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 路由器

指定路由器在建立連線並向各個訊息處理器傳送要求之後,等待接收所有訊息處理器回覆的總時間。

這適用於邊緣安裝作業有多個訊息處理器,且會在發生錯誤時啟用重試功能。其值為下列其中一項:

  • 目前的值: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 逾時值。

您可以使用下列其中一項方法設定虛擬主機:

  • Edge UI
  • Edge API

Edge UI

如要使用 Edge UI 設定虛擬主機,請執行下列操作:

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

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

    Proxy 讀取逾時值 120

  6. 儲存變更。

Edge API

如要使用 Edge API 設定虛擬主機,請執行下列操作:

  1. 使用 Get virtual Host 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. 透過 更新虛擬主機 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 逾時。您可以透過路由器屬性 conf_load_balancing_load.balancing.driver.proxy.read.timeout (以秒為單位) 設定 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 設定路由器的 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;
    

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

  3. 如果還是看到屬性 proxy_read_timeout 的舊值,請確認您已按照正確設定路由器的 I/O 逾時一文所述的所有步驟操作。如果錯過任何步驟,請再次正確重複所有步驟。
  4. 如果仍無法修改 I/O 逾時,請與 Apigee Edge 支援團隊聯絡。

接下來呢?

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