查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
問題
用戶端應用程式收到 HTTP 狀態碼 502 Bad Gateway
,
傳回錯誤代碼 protocol.http.TooBigHeaders
做為 API 的回應
呼叫。
錯誤訊息
用戶端應用程式會取得下列回應代碼:
HTTP/1.1 502 Bad Gateway
此外,您也可能會看到下列錯誤訊息:
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
可能原因
如果目標/後端傳送的標頭總大小,就會發生這個錯誤 作為 HTTP 回應一部分時,將伺服器傳送至 Apigee Edge 在 Apigee Edge 中允許的限制。
以下是導致這個錯誤的可能原因:
原因 | 說明 | 適用的疑難排解操作說明 |
---|---|---|
回應中的標頭大小超過允許的上限 | 某個標頭的大小,或是所有 目標/後端伺服器在 HTTP 回應至 Apigee Edge 時一併傳送的標頭 超過 Apigee Edge 中允許的數量上限。 | 邊緣公有雲和私有雲使用者 |
常見的診斷步驟
請使用下列其中一項工具/技巧診斷這個錯誤:
API Monitoring
如何使用 API Monitoring 診斷錯誤:
- 以下列使用者身分登入 Apigee Edge UI: 擔任適當角色
切換到您要調查問題的機構。
- 前往「Analyze」(分析) >「API 監控 >調查頁面。
- 請選取您發現錯誤的確切時間範圍。
- 您可以選取「Proxy」篩選器來縮小錯誤程式碼的範圍。
- 根據「時間」繪製「Fault Code」指標。
選取含有錯誤程式碼
protocol.http.TooBigHeaders
的儲存格 如下所示:( 查看較大的圖片)
畫面上會顯示錯誤程式碼的相關資訊
protocol.http.TooBigHeaders
,如下所示:( 查看較大的圖片)
按一下「查看記錄」,然後展開失敗要求的資料列。
( 查看較大的圖片)
- 在「Logs」(記錄檔) 視窗中,記下下列詳細資料:
- 狀態碼:
502
- 錯誤來源:
target
- 錯誤代碼:
protocol.http.TooBigHeaders
。
- 狀態碼:
- 如果錯誤來源的值
target
和錯誤 Code 的值是protocol.http.TooBigHeaders
,就表示 來自目標/ 後端伺服器的 HTTP 回應,含有大小更大的標頭 超過 Apigee Edge 中允許的數量上限。
追蹤工具
- 啟用追蹤工作階段
和下列其中一項:
- 等待
502 Bad Gateway
錯誤發生,或 - 如果可以重現問題,請發出 API 呼叫,並重現
502 Bad Gateway
錯誤。
- 等待
- 請選取其中一個失敗的要求,然後檢查追蹤記錄。
- 瀏覽追蹤記錄的各個階段,找出失敗之處 發生。
通常您會在名為 Error 的流程中,緊接在 要求已傳送至目標伺服器階段,如下所示:
( 查看較大的圖片)
請注意追蹤記錄中的錯誤值:
- 錯誤:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
這表示 Apigee Edge (訊息處理器元件) 將錯誤擲回 因標頭大小而收到來自後端伺服器的回應時。 超過允許的上限
- 錯誤:
您會在 Response Sent to Client 中看到失敗的結果 Apigee Edge 傳送的錯誤回應,如下所示:
( 查看較大的圖片)
- 記下追蹤記錄中的錯誤值。上述追蹤記錄範例顯示:
- 錯誤:
502 Bad Gateway
。 - 錯誤內容:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- 錯誤:
前往追蹤記錄中的「AX」AX(已記錄的 Analytics 資料) 階段 然後按一下即可查看相關詳情
( 查看較大的圖片)
請注意下列值:
錯誤標頭 值 X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
錯誤內容:內文 {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
如何使用 NGINX 存取記錄診斷錯誤:
- 如果您是 Private Cloud 使用者,可以使用 NGINX 存取記錄
然後判斷 HTTP
502 Bad Gateway
的重要資訊。 查看 NGINX 存取記錄:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
其中: ORG、ENV 和 PORT# 會替換為實際值。
- 搜尋是否有任何
502
錯誤 在特定期間傳回錯誤代碼protocol.http.TooBigHeaders
(如果問題是過去發生) 或者502
。 如果 X-Apigee-fault-code 未顯示任何
502
錯誤 比對protocol.http.TooBigHeaders
的值,然後 是 X-Apigee-fault-source. 的價值NGINX 存取記錄中的 502 錯誤示例:
上述 NGINX 存取記錄的範例項目如下 X-Apigee-fault-code 和 X-Apigee-fault-code
錯誤標頭 值 X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
原因:回應中的標頭大小超出允許的上限
診斷
- 判定錯誤程式碼、錯誤來源和回應酬載大小 您在使用 API 監控、追蹤工具或 NGINX 存取記錄檔時觀察到錯誤,詳情請參閱 常見的診斷步驟。
- 如果「Fault Source」的值為
target
,則表示 目標/後端伺服器傳送給 Apigee 的回應具有較大的標頭大小 超過 Apigee Edge 允許的數量上限。 - 您可以驗證來自目標/後端的回應是否具有大小是
大於允許的數量上限:
錯誤訊息
如何使用錯誤訊息進行驗證:
如果您可以存取 Apigee Edge 收到的完整錯誤訊息, 請參閱
faultstring
。faultstring
表示 回應標頭大小超出允許的上限。錯誤訊息示例:
"faultstring":"response headers size exceeding 25,600"
在上述錯誤訊息中,請注意
faultstring
回應中的標頭總大小超過允許的上限。實際要求
如要使用實際要求進行驗證,請按照下列步驟操作:
如果您可以存取對目標/後端伺服器提出的實際要求, 然後執行下列步驟:
- 如果您是公用 Cloud/Private Cloud 使用者,請提出要求 或從後端伺服器本身 可讓您向後端提出要求的機器 伺服器
- 如果您是 Private Cloud 使用者,也可以提出要求: 將要求傳送至後端伺服器
- 檢查從後端伺服器接收的回應,特別是 運算並驗證回應中傳遞的標頭總大小。
如果您發現回應酬載中的標頭大小 超過 Apigee Edge 中允許的數量上限。 這就是問題的原因
目標伺服器的回應範例:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intact在上述範例中,
Testheader1
和Testheader2
的大小較高,因此 因為這項錯誤超過 Apigee Edge。
訊息處理器記錄
如何使用訊息處理器記錄進行驗證:
如果您是私有雲使用者,可以透過訊息處理器的記錄檔 驗證回應標頭大小是否超過 在 Apigee Edge 中允許的限制。
查看訊息處理器記錄:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 搜尋,查看特定期間是否有任何
502
錯誤 期間 (如果問題過去發生) 或有任何請求 仍因502
失敗您可能會使用以下搜尋字串:grep -ri "response headers size exceeding"
- 您會看到
system.log
中的行,如下所示。 回應標頭大小可能會因您的情況而異:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
訊息處理者從後端/目標取得回應後 伺服器發現標頭總大小超過 25 KB 指令便會停止並擲回錯誤:
response headers size exceeding 25,600
它表示總標頭大小超過 25 KB,且 Apigee 如果大小開始超過 25 KB 的限制 (包含故障程式碼),就會擲回錯誤 本裝置:
protocol.http.TooBigHeaders
解析度
修正大小
選項 #1 [建議]:修正目標伺服器應用程式不要傳送標頭大小的問題 超過 Apigee 限制
- 分析特定目標伺服器的原因,進一步傳送回應標頭大小 超出限制中定義的允許上限。
- 如果不是,請修改後端伺服器應用程式,將其從 回應標頭的大小小於允許的限制 Apigee Edge。
- 檢查是否能在回應內文中傳送標頭資訊。
- 可以的話,請傳送您打算傳送的任何大量資訊 回應主體中的標頭以免超出回應時間 標頭限制。
CwC
方法 #2:使用 CwC 屬性增加回應標頭大小限制
Apigee 提供 CwC 屬性,允許提高回應標頭大小上限。 詳情請參閱 設定訊息處理器的限制
限制
Apigee 預期用戶端應用程式和後端伺服器不會傳送 標題大小超出文件說明的數量上限 中要求/回應標頭大小 Apigee Edge 限制。
- 如果您是公有雲使用者,則 要求和回應標頭大小如以下所示:要求/回應標頭大小在 Apigee Edge 限制。
- 如果您是 Private Cloud 使用者 ,可能已修改預設上限 要求和回應標頭的大小限制 (即使這不是建議做法)。 如需確認回應標頭大小上限,請參閱 如何查看目前的限制。
如何查看目前的限制?
本節說明如何驗證 HTTPResponse.headers.limit
資源
已透過訊息處理器上的新值進行更新。
- 在訊息處理器電腦上搜尋屬性
HTTPResponse.headers.limit
是/opt/apigee/edge-message-processor/conf
目錄,然後查看 各設定的值如下所示:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- 上述指令的結果範例如下:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
在上方的輸出內容範例中,請注意屬性
HTTPResponse.headers.limit
已在http.properties
中設為25k
。這表示在 Apigee 中為不公開設定的回應酬載大小限制 雲端為 25 KB。
如果仍需 Apigee 支援團隊的協助,請前往 必須收集診斷資訊。
必須收集診斷資訊
收集下列診斷資訊,然後與 Apigee Edge 支援團隊聯絡:
如果您是公有雲使用者,請提供下列資訊:
- 機構名稱
- 環境名稱
- API Proxy 名稱
- 完成
curl
指令 (用來重現502
錯誤) - API 要求的追蹤檔
- 目標/後端伺服器回應的完整輸出內容,以及標頭大小
如果您是 Private Cloud 使用者,請提供下列資訊:
- 偵測到失敗要求的完整錯誤訊息
- 機構名稱
- 環境名稱
- API Proxy 套裝組合
- 失敗 API 要求的追蹤檔
- 完成
curl
指令 (用來重現502
錯誤) - 目標/後端伺服器回應的完整輸出內容,以及標頭大小
NGINX 存取記錄
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
其中: ORG、ENV 和 PORT# 會替換為 實際價值
- 訊息處理器系統記錄:
/opt/apigee/var/log/edge-message-processor/logs/system.log