Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Triệu chứng
Ứng dụng khách sẽ nhận được mã trạng thái HTTP 502 Bad Gateway
kèm theo mã lỗi
protocol.http.TooBigLine
làm phản hồi cho lệnh gọi API.
Thông báo lỗi
Ứng dụng sẽ nhận được mã phản hồi sau đây:
HTTP/1.1 502 Bad Gateway
Ngoài ra, bạn có thể nhận thấy thông báo lỗi sau:
{ "fault":{ "faultstring":"response line size exceeding 2,048", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
Các nguyên nhân có thể
Lỗi này xảy ra nếu kích thước Response-Line do giá trị máy chủ mục tiêu/phụ trợ đến Apigee Edge thuộc về phản hồi HTTP lớn hơn mức tối đa cho phép giới hạn trong Apigee Edge.
Trước khi xem xét các nguyên nhân có thể gây ra lỗi này, hãy tìm hiểu Dòng phản hồi và cách kiểm tra kích thước của nó.
Tìm hiểu về dòng phản hồi
Một phản hồi HTTP thông thường bao gồm ba phần:
- Dòng trạng thái (Được gọi là Dòng phản hồi trong Apigee)
- ( Bộ tiêu đề HTTP )
- [ Nội dung ]
Dòng phản hồi gồm ba phần: phiên bản giao thức, sau đó là số mã trạng thái và cụm từ văn bản có liên quan như được trình bày dưới đây:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Khi phản hồi HTTP được gửi từ ứng dụng máy chủ mục tiêu/phụ trợ, dòng đầu tiên là
sent đại diện cho Response-Line (Dòng phản hồi) như mô tả ở trên. Sau đó là
tiêu đề và nội dung phản hồi/tải trọng.Ảnh chụp màn hình mẫu sau đây cho thấy
yêu cầu curl
, phần Request (Yêu cầu) và phần Response (Phản hồi) (cùng với phần
Dòng trả lời).
Tìm hiểu kích thước Dòng phản hồi
Trong mẫu thảo luận ở trên, dòng start (bắt đầu) (dòng đầu tiên) trong phản hồi cũng được gọi là Response-Line (Dòng phản hồi) như sau:
HTTP/1.1 200 OK
Dòng phản hồi này có kích thước là
~15 bytes
vì có chứa15 ASCII characters
. Vì miền này nằm trong giới hạn được phép trong Apigee Edge, thì phản hồi sẽ được gửi lại cho khách hàng mà không có lỗi của Apigee Edge.- Tương tự, nếu bạn xem
faultstring
trong Thông báo lỗi ở trên, thông báo này chứa"response line size exceeding 2,048"
. Điều này cho biết rằng Response-Line (Dòng phản hồi) trong phản hồi HTTP do máy chủ mục tiêu/phụ trợ gửi vượt quá 2.048 byte.
Tìm hiểu về Dòng phản hồi lớn
Theo định nghĩa của Trạng thái (gọi là Response-Line tại đây) và các yêu cầu HTTP thông thường cũng như thì kích thước sẽ nhỏ hơn nhiều so với giới hạn mặc định đã xác định là 2 K trong Apigee Edge. nên chúng tôi không thể đạt đến giới hạn. Tuy nhiên, dưới đây là một số trường hợp mà bạn có thể vượt quá hạn mức này:
- Máy chủ đích/máy chủ phụ trợ không phải là một hệ thống HTTP. Có thể là phản hồi với giao thức không phải HTTP của bạn.
- Máy chủ mục tiêu/máy chủ phụ trợ gặp sự cố và gửi một Dòng phản hồi dài dưới dạng một phần của HTTP của bạn.
Đọc thêm về điều này trong Gặp lỗi Protocol.http.TooBigLine, "kích thước dòng phản hồi vượt quá 2.048.
Dưới đây là những nguyên nhân có thể gây ra lỗi:
Nguyên nhân | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Kích thước dòng phản hồi lớn hơn giới hạn cho phép | Kích thước của Response-Line do máy chủ mục tiêu/phụ trợ gửi trong Phản hồi HTTP đối với Apigee Edge lớn hơn Giới hạn được phép trong Apigee Edge | Người dùng Edge công khai và riêng tư |
Các bước chẩn đoán phổ biến
Hãy sử dụng một trong các công cụ/kỹ thuật sau để chẩn đoán lỗi này:
Giám sát API
Cách chẩn đoán lỗi bằng tính năng Giám sát API:
- Đăng nhập vào giao diện người dùng Apigee Edge với tư cách là người dùng có vai trò thích hợp.
Chuyển sang tổ chức mà bạn muốn điều tra vấn đề này.
- Chuyển đến thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
- Chọn khung thời gian cụ thể mà bạn phát hiện thấy lỗi.
- Bạn có thể chọn bộ lọc Proxy để thu hẹp mã lỗi.
- Vẽ Mã lỗi theo Thời gian.
Chọn một ô có mã lỗi
protocol.http.TooBigLine
là được hiển thị bên dưới:Bạn sẽ thấy thông tin về mã lỗi
protocol.http.TooBigLine
như minh hoạ dưới đây:Nhấp vào Xem nhật ký và mở rộng hàng của yêu cầu không thành công.
- Từ cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin chi tiết sau:
- Mã trạng thái:
502
- Nguồn lỗi:
target
- Mã lỗi:
protocol.http.TooBigLine
.
- Mã trạng thái:
- Nếu Nguồn lỗi có giá trị
target
và Lỗi Mã có giá trịprotocol.http.TooBigLine
, sau đó điều đó cho biết rằng phản hồi HTTP từ máy chủ đích/ máy chủ phụ trợ có kích thước Dòng phản hồi lớn hơn giới hạn tối đa được phép trên Apigee Edge.
Công cụ theo dõi
- Bật phiên theo dõi
và:
- Chờ lỗi
502 Bad Gateway
xảy ra. hoặc - Nếu bạn có thể tái hiện vấn đề, hãy thực hiện lệnh gọi API và tái tạo lỗi
502 Bad Gateway
.
- Chờ lỗi
- Chọn một trong các yêu cầu không thành công rồi kiểm tra dấu vết.
- Di chuyển qua các giai đoạn của quá trình theo dõi và xác định vị trí lỗi đã xảy ra.
Thông thường, bạn sẽ thấy lỗi trong phần
flowinfo
Lỗi sau giai đoạn Gửi yêu cầu đến máy chủ mục tiêu như minh hoạ dưới đây:Lưu ý các giá trị của lỗi trong dấu vết:
- lỗi:
response line exceeding 2,048
- error.class:
com.apigee.errors.http.server.BadGateway
Mã này cho biết rằng Apigee Edge (thành phần Trình xử lý tin nhắn) sẽ gửi lỗi dưới dạng ngay khi nhận được phản hồi từ máy chủ phụ trợ do kích thước Dòng phản hồi vượt quá giới hạn cho phép.
- lỗi:
Bạn sẽ thấy thông báo lỗi được gửi tới máy khách trong mục Phản hồi được gửi tới Giai đoạn khách hàng như sau:
- Lưu ý các giá trị của lỗi trong dấu vết:
- Lỗi:
502 Bad Gateway
. - Nội dung lỗi:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Lỗi:
Bạn cũng có thể chuyển đến giai đoạn AX (Đã ghi dữ liệu Analytics) trong quy trình theo dõi rồi nhấp vào đó để xem thông tin chi tiết về lỗi.
Hãy lưu ý giá trị của các tham số sau:
Tiêu đề của yêu cầu Giá trị X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
Nội dung lỗi : Nội dung {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
Cách chẩn đoán lỗi bằng nhật ký truy cập NGINX:
- Nếu là người dùng Đám mây riêng tư, bạn có thể sử dụng nhật ký truy cập NGINX để
xác định thông tin chính về lỗi HTTP
502
. Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Trong đó: ORG, ENV và PORT# được thay thế bằng các giá trị thực tế.
- Tìm kiếm để xem có lỗi
502
nào trong một khoảng thời gian cụ thể hay không (nếu sự cố đã xảy ra trong quá khứ) hoặc nếu có bất kỳ yêu cầu nào vẫn không thành công với502
. Nếu bạn tìm thấy bất kỳ lỗi
502
nào với mã X-Apigee-fault-code khớp với giá trị củaprotocol.http.TooBigLine
, sau đó xác định giá trị của X-Apigee-fault-source.Mục nhập mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau cho X- Apigee-fault-code và X-Apigee-fault-source:
Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
Nguyên nhân: Kích thước dòng phản hồi lớn hơn giới hạn cho phép
Chẩn đoán
- Xác định Mã lỗi và Nguồn lỗi cho lỗi phát hiện được bằng API Công cụ giám sát, công cụ theo dõi hoặc nhật ký truy cập NGINX như giải thích trong Các bước chẩn đoán thường gặp.
- Nếu Nguồn lỗi có giá trị
target
, thì điều này cho biết rằng Kích thước Dòng phản hồi mà ứng dụng máy chủ mục tiêu/phụ trợ gửi đến Apigee lớn hơn giới hạn được phép trong Apigee Edge. Bạn có thể xác thực rằng kích thước Dòng phản hồi đã vượt quá giới hạn cho phép 2 KB bằng cách sử dụng một phương thức sau:
Thông báo lỗi
Cách xác thực bằng thông báo lỗi:
Nếu bạn có thể xem thông báo lỗi đầy đủ từ Apigee Edge, hãy tham khảo
faultstring
.Thông báo lỗi mẫu:
"faultstring":"response line size exceeding 2,048"
faultstring
ở trên cho biết rằng kích thước Dòng phản hồi đã vượt quá mức cho phép tối đa là 2 KB.Yêu cầu thực tế
Cách xác thực bằng yêu cầu thực tế:
Nếu bạn có quyền truy cập vào yêu cầu thực tế được gửi đến máy chủ đích/máy chủ phụ trợ ứng dụng, sau đó thực hiện các bước sau:
- Xác minh kích thước của Dòng phản hồi
- Nếu bạn thấy rằng kích thước của URI lớn hơn
giới hạn được phép trong Apigee Edge, thì đó là nguyên nhân
vấn đề.
Phản hồi mẫu từ máy chủ đích/máy chủ phụ trợ:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
Trong trường hợp trên, Dòng phản hồi
HTTP/1.1 200 1111…<trimmed>...11111111
lớn hơn 2 KB, tức là dòng này chứa hơn 2 K ký tự ASCII.Nếu bạn đang sử dụng một số ứng dụng khác, bạn có thể xem lại nhật ký ứng dụng và thử để biết quy mô của Đường dây phản hồi được gửi đến Apigee Edge.
Nhật ký Trình xử lý thư
Để xác thực bằng nhật ký Trình xử lý thư:
Nếu là người dùng Đám mây riêng tư, bạn có thể sử dụng nhật ký của Trình xử lý thư để xác thực xem kích thước Dòng phản hồi có vượt quá kích thước Giới hạn được phép trong Apigee Edge.
- Xác định mã nhận dạng thông báo của yêu cầu không thành công bằng cách sử dụng API Giám sát, công cụ Theo dõi, hoặc nhật ký truy cập NGINX như giải thích trong Các bước chẩn đoán phổ biến.
Tìm mã nhận dạng thư trong nhật ký Trình xử lý thư:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Bạn sẽ thấy các dòng từ
system.log
tương tự như sau:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
Văn bản
message = response line size exceeding 2,048
trong phía trên thông báo lỗi cho biết kích thước Dòng phản hồi lớn hơn 2 KB. Do đó, Apigee Edge gửi trường hợp ngoại lệ và trả về mã trạng thái502
có mã lỗiprotocol.http.TooBigline
cho ứng dụng khách.
Độ phân giải
Khắc phục kích thước
Lựa chọn 1 [Nên dùng]: Khắc phục việc ứng dụng máy chủ đích/phụ trợ không gửi được Dòng phản hồi có kích thước lớn hơn giới hạn cho phép
- Phân tích lý do khiến khách hàng cụ thể gửi Dòng phản hồi có kích thước lớn hơn giới hạn cho phép như được xác định trong Giới hạn.
- Nếu bạn không mong muốn, hãy sửa đổi ứng dụng máy chủ phụ trợ/mục tiêu để nó sẽ gửi một Dòng phản hồi có kích thước nhỏ hơn giới hạn cho phép.
- Nếu cần và bạn muốn gửi một Dòng phản hồi có kích thước lớn hơn giới hạn cho phép, hãy chuyển đến các lựa chọn tiếp theo.
CwC
Lựa chọn 2: Sử dụng thuộc tính CwC để tăng giới hạn Dòng phản hồi
Apigee cung cấp CwC cho phép tăng giới hạn kích thước Dòng phản hồi. Để biết thông tin chi tiết, hãy xem Đặt giới hạn Dòng phản hồi trên Trình xử lý tin nhắn.
Giới hạn
Apigee dự kiến rằng ứng dụng khách và máy chủ phụ trợ sẽ không gửi Yêu cầu/Dòng phản hồi có kích thước lớn hơn giới hạn cho phép như được ghi trong Giới hạn dòng yêu cầu/phản hồi trong Apigee EdgeGiới hạn.
- Nếu bạn là người dùng Cloud công khai, thì giới hạn tối đa đối với Yêu cầu và Kích thước Dòng phản hồi như được ghi trong tài liệu về kích thước Yêu cầu/Dòng phản hồi trong Các giới hạn của Apigee Edge.
- Nếu là người dùng Đám mây riêng tư , thì bạn có thể đã sửa đổi mức tối đa mặc định cho kích thước Yêu cầu và Dòng phản hồi (mặc dù đây không phải là phương pháp nên dùng). Bạn có thể xác định giới hạn kích thước Dòng phản hồi tối đa bằng cách làm theo các hướng dẫn trong Cách kiểm tra hạn mức hiện tại.
Cách kiểm tra hạn mức hiện tại?
Phần này giải thích cách xác minh thuộc tính HTTPResponse.line.limit
có
đã được cập nhật một giá trị mới trên Trình xử lý thư.
- Trên máy Xử lý thư, hãy tìm kiếm thuộc tính
HTTPResponse.line.limit
trong Thư mục/opt/apigee/edge-message-processor/conf
và kiểm tra để hãy xem giá trị nào đã được đặt như minh hoạ bên dưới:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- Kết quả mẫu từ lệnh trên như sau:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
Trong kết quả của ví dụ ở trên, hãy lưu ý rằng thuộc tính
HTTPResponse.line.limit
đã được thiết lập với giá trị2k
tronghttp.properties
.Giá trị này cho biết giới hạn về quy mô Dòng phản hồi được thiết lập trong Apigee cho Riêng tư Đám mây có kích thước 2 KB.
Nếu bạn vẫn cần hỗ trợ từ Nhóm hỗ trợ Apigee, hãy truy cập vào Phải thu thập thông tin chẩn đoán.
Phải thu thập thông tin chẩn đoán
Thu thập những thông tin chẩn đoán sau đây rồi liên hệ với Bộ phận hỗ trợ Apigee Edge:
Nếu bạn là người dùng Cloud Public, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên proxy API
- Hoàn tất lệnh curl dùng để tái hiện lỗi
502
- Tệp theo dõi cho các yêu cầu API
Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp các thông tin sau:
- Đã nhận thấy thông báo lỗi hoàn chỉnh đối với các yêu cầu không thực hiện được
- Tên tổ chức
- Tên môi trường
- Gói Proxy API
- Tệp theo dõi cho các yêu cầu API không thành công
- Hoàn tất lệnh
curl
dùng để tái hiện lỗi502
Nhật ký truy cập NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Vị trí: ORG, ENV và PORT# được thay thế bằng giá trị thực tế.
- Nhật ký hệ thống của Trình xử lý thư
/opt/apigee/var/log/edge-message-processor/logs/system.log