Вы просматриваете документацию 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" } } }
Возможные причины
Эта ошибка возникает, если общий размер заголовков, отправленных целевым/внутренним сервером в Apigee Edge как часть ответа HTTP, превышает допустимый предел в Apigee Edge .
Вот возможные причины этой ошибки:
Причина | Описание | Инструкции по устранению неполадок применимы для |
---|---|---|
Размер заголовков в ответе превышает допустимый предел | Размер заголовка конкретного заголовка или сумма размеров заголовков всех заголовков, отправленных целевым/внутренним сервером как часть ответа HTTP на Apigee Edge, превышает допустимый предел в Apigee Edge . | Пользователи Edge Public и Private Cloud |
Общие этапы диагностики
Для диагностики этой ошибки используйте один из следующих инструментов/методов:
API-мониторинг
Чтобы диагностировать ошибку с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge как пользователь с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите разобраться в проблеме.
- Перейдите на страницу Анализ > Мониторинг API > Расследование .
- Выберите конкретный период времени, в течение которого вы наблюдали ошибки.
- Вы можете выбрать прокси- фильтр, чтобы сузить код неисправности.
- Постройте график зависимости кода неисправности от времени .
Выберите ячейку с кодом ошибки
protocol.http.TooBigHeaders
, как показано ниже:Вы увидите информацию о коде неисправности
protocol.http.TooBigHeaders
, как показано ниже:Нажмите «Просмотреть журналы» и разверните строку с невыполненным запросом.
- В окне «Журналы» обратите внимание на следующие детали:
- Код состояния:
502
- Источник неисправности:
target
- Код ошибки:
protocol.http.TooBigHeaders
.
- Код состояния:
- Если источник сбоя имеет значение
target
, а код сбоя имеет значениеprotocol.http.TooBigHeaders
, это указывает на то, что ответ HTTP от целевого/внутреннего сервера содержит заголовки, размер которых превышает допустимый предел в Apigee Edge .
Инструмент трассировки
- Включите сеанс трассировки и выполните одно из следующих действий:
- Дождитесь появления ошибки
502 Bad Gateway
или - Если вы можете воспроизвести проблему, выполните вызов API и воспроизведите ошибку
502 Bad Gateway
.
- Дождитесь появления ошибки
- Выберите один из неудачных запросов и проверьте трассировку.
- Перемещайтесь по различным этапам трассировки и найдите место, где произошел сбой.
Обычно вы увидите эту ошибку в потоке с именем Ошибка сразу после фазы запроса, отправленного на целевой сервер, как показано ниже:
( просмотреть увеличенное изображение )
Обратите внимание на значения ошибки из трассировки:
- ошибка:
response headers size exceeding 25,600
- error.class :
com.apigee.errors.http.server.BadGateway
Это указывает на то, что Apigee Edge (компонент процессора сообщений) выдает ошибку, как только получает ответ от внутреннего сервера, из-за того, что размер заголовка превышает допустимый предел.
- ошибка:
Вы увидите ошибку в ответе об ошибке, отправленном клиенту, отправленном Apigee Edge, как показано ниже:
- Обратите внимание на значения ошибки из трассировки. Приведенный выше пример трассировки показывает:
- Ошибка:
502 Bad Gateway
. - Содержимое ошибки:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Ошибка:
Перейдите к этапу AX (записанные аналитические данные) в трассировке и щелкните его, чтобы просмотреть соответствующие сведения.
( просмотреть увеличенное изображение )
Обратите внимание на ценность следующего:
Заголовки ошибок Ценить X-Apigee-код неисправности protocol.http.TooBigHeaders
X-Apigee-источник-ошибки target
Содержание ошибки: Тело {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
НГИНКС
Чтобы диагностировать ошибку с помощью журналов доступа NGINX:
- Если вы являетесь пользователем частного облака , вы можете использовать журналы доступа 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
. Если вы обнаружите какие-либо ошибки
502
с кодом X-Apigee-fault-code , соответствующим значениюprotocol.http.TooBigHeaders
, определите значение X-Apigee-fault-source.Пример ошибки 502 из журнала доступа NGINX:
Приведенный выше пример записи из журнала доступа NGINX имеет следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки ошибок Ценить X-Apigee-код неисправности protocol.http.TooBigHeaders
X-Apigee-источник-ошибки target
Причина: Размер заголовков в ответе превышает допустимый предел.
Диагностика
- Определите код ошибки , источник ошибки и размер полезной нагрузки ответа для обнаруженной ошибки с помощью мониторинга API, инструмента трассировки или журналов доступа NGINX, как описано в разделе «Общие шаги диагностики» .
- Если источник сбоя имеет значение
target
, это указывает на то, что ответ, отправленный целевым/внутренним сервером в Apigee, содержит заголовки, размер которых превышает разрешенный предел в Apigee Edge . - Вы можете проверить, что ответ от цели/серверной части содержит заголовки, размер которых превышает допустимый предел, используя один из следующих методов:
Сообщение об ошибке
Чтобы подтвердить использование сообщения об ошибке:
Если у вас есть доступ к полному сообщению об ошибке, полученному от Apigee Edge, обратитесь к
faultstring
.faultstring
указывает, что размер заголовка ответа превысил допустимый предел.Пример сообщения об ошибке:
"faultstring":"response headers size exceeding 25,600"
В приведенном выше сообщении об ошибке обратите внимание на
faultstring
, что ответ содержит заголовки, общий размер которых превышает допустимый предел .Фактический запрос
Чтобы подтвердить использование фактического запроса:
Если у вас есть доступ к фактическому запросу, отправленному на целевой/внутренний сервер, выполните следующие шаги:
- Если вы являетесь пользователем публичного или частного облака , отправьте запрос непосредственно на внутренний сервер с самого внутреннего сервера или любого другого компьютера, с которого вам разрешено отправлять запросы на внутренний сервер.
- Если вы являетесь пользователем частного облака , вы также можете отправить запрос на внутренний сервер от одного из процессоров сообщений.
- Изучите ответ, полученный от внутреннего сервера, и, в частности, вычислите и проверьте общий размер заголовков, переданных в ответе.
Если вы обнаружите, что размер заголовков в ответной полезной нагрузке превышает допустимый предел в 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 КБ, он останавливается и выдает ошибку:
response headers size exceeding 25,600
Это означает, что общий размер заголовка превышает 25 КБ, и Apigee выдает ошибку, когда размер начинает превышать предел в 25 КБ с кодом ошибки в качестве
protocol.http.TooBigHeaders
Разрешение
Исправить размер
Вариант № 1 [рекомендуется]: исправить так, чтобы приложение целевого сервера не отправляло заголовки, размер которых превышает ограничение Apigee.
- Проанализируйте причину, по которой конкретный целевой сервер отправляет размер заголовка ответа, превышающий допустимый предел, определенный в Limits .
- Если это нежелательно, измените приложение внутреннего сервера так, чтобы оно отправляло заголовки ответов, размер которых меньше разрешенного предела в Apigee Edge .
- Проверьте, можно ли отправить информацию заголовка как часть тела ответа.
- Если это возможно, отправьте любую большую информацию, которую вы планировали отправить, как часть заголовка в теле ответа. Это гарантирует, что вы не превысите лимит заголовка ответа.
КвК
Вариант 2. Используйте свойство CwC, чтобы увеличить предельный размер заголовка ответа.
Apigee предоставляет свойство CwC , которое позволяет увеличить предел размера заголовков ответов. Подробности см. в разделе «Настройка ограничений для процессора сообщений».
Пределы
Apigee ожидает, что клиентское приложение и внутренний сервер не будут отправлять размеры заголовков, превышающие разрешенный предел, как указано в разделе «Размер заголовка запроса/ответа» в Apigee Edge Limits .
- Если вы являетесь пользователем публичного облака , то максимальный предел размера заголовков запроса и ответа соответствует размеру заголовка запроса/ответа, указанному в Apigee Edge Limits .
- Если вы являетесь пользователем частного облака, возможно, вы изменили максимальный предел по умолчанию для размера заголовков запросов и ответов (хотя это не рекомендуется). Вы можете определить максимальный размер заголовка ответа, следуя инструкциям в разделе «Как проверить текущий предел» .
Как проверить текущий лимит?
В этом разделе объясняется, как проверить, что свойство 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
присвоено значение25k
вhttp.properties
.Это указывает на то, что ограничение размера полезных данных ответа, настроенного в Apigee для частного облака, составляет 25 КБ.
Если вам по-прежнему нужна помощь со стороны службы поддержки Apigee, перейдите к разделу «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию
Соберите следующую диагностическую информацию, а затем обратитесь в службу поддержки Apigee Edge :
Если вы являетесь пользователем Public Cloud , предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя API-прокси
- Полная команда
curl
, используемая для воспроизведения ошибки502
- Файл трассировки запросов API
- Полный вывод ответа от целевого/внутреннего сервера вместе с размером заголовков.
Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке, наблюдаемое для неудачных запросов
- Название организации
- Имя среды
- Пакет API-прокси
- Файл трассировки неудачных запросов 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