502 Bozuk Ağ Geçidi - TooBigHeaders

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, API çağrılarına yanıt olarak protocol.http.TooBigHeaders hata koduyla birlikte 502 Bad Gateway HTTP durum kodunu alır.

Hata mesajı

İstemci uygulaması aşağıdaki yanıt kodunu alır:

HTTP/1.1 502 Bad Gateway

Ayrıca, aşağıdaki hata mesajını da görebilirsiniz:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Olası nedenler

Bu hata, HTTP yanıtının bir parçası olarak hedef/arka uç sunucusu tarafından Apigee Edge'e gönderilen üstbilgilerin toplam boyutu, Apigee Edge'de izin verilen sınırdan büyükse ortaya çıkar.

Bu hatanın olası nedenleri aşağıda açıklanmıştır:

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Yanıttaki üstbilgilerin boyutu izin verilen sınırdan büyük Belirli bir başlığın üst bilgi boyutu veya Apigee Edge'e HTTP yanıtının bir parçası olarak hedef/arka uç sunucusu tarafından gönderilen tüm üst bilgilerin üst bilgi boyutlarının toplamı, Apigee Edge'de izin verilen sınırdan fazladır. Edge Herkese Açık ve Özel Bulut kullanıcıları

Yaygın teşhis adımları

Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:

API Monitoring

API Monitoring'i kullanarak hatayı teşhis etmek için:

  1. Uygun role sahip bir kullanıcı olarak Apigee Edge kullanıcı arayüzünde oturum açın.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analiz > API İzleme > Araştır sayfasına gidin.
  4. Hataları gözlemlediğiniz belirli zaman aralığını seçin.
  5. Hata kodunu daraltmak için Proxy filtresini seçebilirsiniz.
  6. Hata Kodu'nu Zamana göre çizin.
  7. Aşağıda gösterildiği gibi protocol.http.TooBigHeaders hata koduna sahip bir hücre seçin:

    ( büyük resmi göster)

  8. protocol.http.TooBigHeaders hata koduyla ilgili bilgileri aşağıda gösterildiği gibi görürsünüz:

    ( büyük resmi göster)

  9. Günlükleri görüntüle'yi tıklayın ve başarısız isteğin satırını genişletin.

    ( büyük resmi göster)

  10. Günlükler penceresinde aşağıdaki ayrıntıları dikkate alın:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.TooBigHeaders.
  11. Hata Kaynağı target değerine ve Hata Kodu protocol.http.TooBigHeaders değerine sahipse bu durum, hedef/ arka uç sunucusundan gelen HTTP yanıtının, boyutu Apigee Edge'de izin verilen sınırdan daha büyük olan başlıklara sahip olduğunu gösterir.

İzleme aracı

  1. İzleme oturumunu etkinleştirin ve aşağıdakilerden birini yapın:
    1. 502 Bad Gateway hatasının oluşmasını bekleyin veya
    2. Sorunu yeniden oluşturabiliyorsanız API çağrısında bulunun ve 502 Bad Gateway hatasını yeniden oluşturun.
  2. Başarısız isteklerden birini seçip izi inceleyin.
  3. İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
  4. Bu hatayı genellikle aşağıda gösterildiği gibi, İstek hedef sunucuya gönderildi aşamasından hemen sonra Hata adlı akışta görürsünüz:

    ( büyük resmi göster)

    İzlemedeki hatanın değerlerini not edin:

    • hata: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Bu durum, Apigee Edge'in (Mesaj İşleyici bileşeni) üst bilgi boyutunun izin verilen sınırı aşması nedeniyle arka uç sunucusundan yanıt alır almaz hatayı bildirdiğini gösterir.

  5. Hatayı, Apigee Edge tarafından gönderilen İstemciye Gönderilen Yanıt hata yanıtında aşağıdaki şekilde görürsünüz:

    ( büyük resmi göster)

  6. İzlemedeki hatanın değerlerini not edin. Yukarıdaki örnek iz şunları gösterir:
    • Hata: 502 Bad Gateway.
    • Hata İçeriği: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. İzdeki AX (Analytics Verileri Kaydı) aşamasına gidin ve ilgili ayrıntıları görmek için bu aşamayı tıklayın.

    ( büyük resmi göster)

    Aşağıdakilerin değerini not edin:

    Hata üstbilgileri Değer
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Hata İçeriği: Gövde {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:

  1. Private Cloud kullanıcısıysanız HTTP 502 Bad Gateway ile ilgili önemli bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz.
  2. NGINX erişim günlüklerini kontrol edin:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Yer: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.

  3. Belirli bir süre boyunca protocol.http.TooBigHeaders hata koduna sahip 502 hatası olup olmadığını (sorun geçmişte olduysa) veya 502 nedeniyle başarısız olmaya devam eden bir istek olup olmadığını görmek için arama yapın.
  4. X-Apigee-fault-code değeriyle eşleşen X-Apigee-fault-code özelliğinde 502 hatası bulursanız X-Apigee-fault-code değerinin değerini belirleyin.

    NGINX erişim günlüğünden örnek 502 hatası:

    NGINX erişim günlüğünden yukarıdaki örnek giriş, X-Apigee-fault-code ve X-Apigee-fault-code için aşağıdaki değerlere sahiptir:

    Hata üstbilgileri Değer
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Neden: Yanıttaki üstbilgilerin boyutu izin verilen sınırdan büyük

Teşhis

  1. API Monitoring, Trace aracı veya NGINX Erişimi günlükleri kullanılarak gözlemlenen hata için Yaygın teşhis adımları bölümünde açıklandığı şekilde Hata Kodu, Hata Kaynağı ve Yanıt Yük Boyutu'nu belirleyin.
  2. Hata Kaynağı target değerine sahipse bu durum, hedef/arka uç sunucusu tarafından Apigee'ye gönderilen yanıtın, boyutu Apigee Edge'de izin verilen sınırdan daha büyük başlıklara sahip olduğunu gösterir.
  3. Hedef/arka uçtan gelen yanıtın, boyutu izin verilen sınırdan daha büyük olan başlıklara sahip olduğunu doğrulamak için aşağıdaki yöntemlerden birini kullanabilirsiniz:

    Hata mesajı

    Hata mesajını kullanarak doğrulamak için:

    Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa faultstring dokümanına bakın. faultstring, yanıt başlığı boyutunun izin verilen sınırı aştığını gösterir.

    Örnek hata mesajı:

    "faultstring":"response headers size exceeding 25,600"
    

    Yukarıdaki hata mesajında yer alan faultstring bölümünde, yanıtın toplam boyutu izin verilen sınırı aşan başlıklara sahip olduğuna dikkat edin.

    Gerçek istek

    Gerçek isteği kullanarak doğrulamak için:

    Hedef/arka uç sunucusuna yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:

    1. Herkese Açık Bulut/Private Cloud kullanıcısıysanız arka uç sunucusuna veya arka uç sunucusuna istekte bulunmasına izin verilen başka bir makineden doğrudan arka uç sunucuya istek gönderin.
    2. Private Cloud kullanıcısıysanız Mesaj İşleyicilerin birinden arka uç sunucuya istek gönderebilirsiniz.
    3. Arka uç sunucusundan alınan yanıtı inceleyin ve özellikle yanıtta geçirilen üstbilgilerin toplam boyutunu hesaplayıp doğrulayın.
    4. Yanıt yükündeki başlıkların boyutunun Apigee Edge'de izin verilen sınırın üzerinde olduğunu görürseniz sorunun nedeni budur.

      Hedef sunucudan örnek yanıt:

      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
      

      Yukarıdaki örnekte Testheader1 ve Testheader2 daha yüksek boyutlara sahiptir. Bu hatanın nedeni, Apigee Edge'de izin verilen sınırı aşmasıdır.

    Mesaj İşleyici günlükleri

    İleti İşleyici günlüklerini kullanarak doğrulamak için:

    Private Cloud kullanıcısıysanız Yanıt üstbilgileri boyutunun Apigee Edge'de izin verilen sınırı aşıp aşmadığını doğrulamak için Mesaj İşleyici günlüklerini kullanabilirsiniz.

    1. Message Processor günlüklerini kontrol edin:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Belirli bir süre boyunca 502 hatası olup olmadığını (sorun geçmişte gerçekleştiyse) veya 502 nedeniyle başarısız olan bir istek olup olmadığını görmek için arama yapın. Aşağıdaki arama dizesini kullanabilirsiniz:
      grep -ri "response headers size exceeding"
      
    3. system.log kaynağından aşağıdakine benzer satırlar göreceksiniz. Yanıt başlıkları boyutu sizin durumunuza göre değişiklik gösterebilir:
      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)
      
    4. Mesaj İşleyici, arka uç/hedef sunucudan yanıt alıp başlıkların toplam boyutunun 25 KB'tan büyük olduğunu tespit eder etmez durur ve hatayı bildirir:

      response headers size exceeding 25,600

      Bu, Toplam Üst Bilgi Boyutu'nun 25 KB'tan büyük olduğu anlamına gelir ve boyut, 25 KB'lık sınırı aşmaya başladığında Apigee hata koduyla birlikte protocol.http.TooBigHeaders olarak hata verir.

Çözünürlük

Boyutu düzelt

1. Seçenek [Önerilen]: Hedef sunucu uygulamasının, üst bilgi boyutunu Apigee sınırını aşmaması için düzeltilmesi

  1. Belirli bir hedef sunucunun, Sınırlar'da tanımlanan izin verilen sınırdan daha fazla yanıt başlığı boyutu gönderme nedenini analiz edin.
  2. Bu istenen bir durum değilse arka uç sunucu uygulamanızı, boyutu Apigee Edge'de izin verilen sınırın altında olan Yanıt üst bilgilerini gönderecek şekilde değiştirin.
  3. Üstbilgi bilgilerinin yanıt gövdesinin bir parçası olarak gönderilip gönderilemeyeceğini kontrol edin.
  4. Mümkünse yanıt gövdesinde, başlığın bir parçası olarak göndermeyi planladığınız kapsamlı bilgileri gönderin. Böylece yanıt başlığı sınırını aşmazsınız.

CwC

2. Seçenek : Yanıt başlığı boyut sınırını artırmak için CwC özelliğini kullanma

Apigee, yanıt başlığı boyut sınırını artıran bir CwC özelliği sunar. Ayrıntılar için İleti İşleyici için sınırları yapılandırma bölümüne bakın.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları bölümünde İstek/Yanıt Başlığı Boyutu için belirtildiği üzere izin verilen sınırın üzerinde üstbilgi boyutları göndermemesini bekler.

  1. Herkese Açık Bulut kullanıcısıysanız İstek ve Yanıt üst bilgileri için maksimum sınır, Apigee Edge Sınırları'ndaki İstek/Yanıt Başlığı boyutu bölümünde belirtildiği şekildedir.
  2. Private Cloud kullanıcısıysanız İstek ve Yanıt başlığı boyutu için varsayılan maksimum sınırı değiştirmiş olabilirsiniz (önerilen bir uygulama olmasa da). Geçerli sınırı kontrol etme başlıklı makaledeki talimatları uygulayarak maksimum yanıt başlığı boyutu sınırını belirleyebilirsiniz.

Geçerli sınır nasıl kontrol edilir?

Bu bölümde, HTTPResponse.headers.limit özelliğinin Mesaj İşleyicilerde yeni bir değerle güncellendiğini nasıl doğrulayacağınız açıklanmaktadır.

  1. Mesaj İşleyici makinesinde, /opt/apigee/edge-message-processor/conf dizininde HTTPResponse.headers.limit özelliğini arayın ve aşağıda gösterildiği gibi hangi değerin ayarlandığını kontrol edin:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Yukarıdaki komuttan alınan örnek sonuç aşağıdaki gibidir:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. Yukarıdaki örnek çıkışta, HTTPResponse.headers.limit özelliğinin http.properties içindeki 25k değeriyle ayarlandığını unutmayın.

    Bu, Private Cloud için Apigee'de yapılandırılan yanıt yükü boyutu sınırının 25 KB olduğunu gösterir.

Apigee Desteği'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplamanız gerekiyor bölümünü inceleyin.

Teşhis bilgileri toplanmalıdır

Aşağıdaki teşhis bilgilerini toplayın ve ardından Apigee Edge Destek Ekibi ile iletişime geçin:

Herkese Açık Bulut kullanıcısıysanız aşağıdaki bilgileri sağlayın:

  • Kuruluş adı
  • Ortam adı
  • API Proxy adı
  • 502 hatasını yeniden oluşturmak için kullanılan curl komutunu tamamlayın
  • API istekleri için izleme dosyası
  • Başlıkların boyutuyla birlikte hedef/arka uç sunucusundan alınan yanıtın tam çıktısı

Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:

  • Başarısız istekler için gözlemlenen tam hata mesajı
  • Kuruluş adı
  • Ortam adı
  • API Proxy paketi
  • Başarısız API istekleri için izleme dosyası
  • 502 hatasını yeniden oluşturmak için kullanılan curl komutunu tamamlayın
  • Başlıkların boyutuyla birlikte hedef/arka uç sunucusundan alınan yanıtın tam çıktısı
  • NGINX erişim günlükleri /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Yer: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.

  • Mesaj İşleyici sistem günlükleri /opt/apigee/var/log/edge-message-processor/logs/system.log