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 502 Bad Gateway HTTP durum kodunu protocol.http.TooBigHeaders hata koduyla birlikte 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, hedef/arka uç sunucu tarafından HTTP yanıtının bir parçası olarak Apigee Edge'e gönderilen üstbilgilerin toplam boyutu, Apigee Edge'de izin verilen sınırı aştığında oluşur.

Bu hatanın olası nedenleri şunlardır:

Neden Açıklama Aşağıdaki ürünler için geçerli sorun giderme talimatları
Yanıtın başlıklarının boyutu, izin verilen sınırdan büyük Belirli bir başlığın başlık boyutu veya hedef/arka uç sunucu tarafından Apigee Edge'e HTTP yanıtının bir parçası olarak gönderilen tüm başlıkların başlık boyutlarının toplamı, Apigee Edge'deki izin verilen sınırdan daha büyük. Edge Public ve Private Cloud kullanıcıları

Sık karşılaşılan teşhis adımları

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

API Monitoring

API İzleme'yi kullanarak hatayı teşhis etmek için:

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

  3. Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) 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 Kodunu Zaman ile karşılaştırın.
  7. Aşağıda gösterildiği gibi, hata kodu protocol.http.TooBigHeaders olan bir hücre seçin:

    ( daha büyük resmi görüntüle)

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

    ( daha büyük resmi görüntüle)

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

    ( daha büyük resmi görüntüle)

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

İzleme aracı

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

    ( daha büyük resmi görüntüle)

    İzlemedeki hata değerlerini not edin:

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

    Bu, Apigee Edge'in (Mesaj İşleyici bileşeni) arka uç sunucusundan yanıtı alır almaz, başlık boyutu izin verilen sınırı aştığı için hatayı verdiğini gösterir.

  5. Aşağıda gösterildiği gibi, Apigee Edge tarafından gönderilen İstemciye Gönderilen Yanıt hata yanıtında başarısızlık gösterilir:

    ( daha büyük resmi görüntüle)

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

    ( daha büyük resmi görüntüle)

    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. Özel bulut kullanıcısıysanız HTTP 502 Bad Gateway ile ilgili temel 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

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

  3. Belirli bir süre boyunca 502 hata koduyla protocol.http.TooBigHeaders hata olup olmadığını (sorun geçmişte yaşandıysa) veya 502 ile hâlâ başarısız olan istekler olup olmadığını kontrol edin.
  4. X-Apigee-fault-code değerinin protocol.http.TooBigHeaders değeriyle eşleştiği 502 hataları bulursanız X-Apigee-fault-source değerini belirleyin.

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

    NGINX erişim günlüğündeki yukarıdaki örnek girişte, X-Apigee-fault-code ve X-Apigee-fault-source için aşağıdaki değerler yer almaktadır:

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

Neden: Yanıttaki başlıkların boyutu, izin verilen sınırı aşıyor

Teşhis

  1. Genel teşhis adımları bölümünde açıklandığı gibi, API izleme, izleme aracı veya NGINX erişim günlükleri kullanılarak gözlemlenen hata için Hata Kodu, Hata Kaynağı ve Yanıt Yükü Boyutu'nu belirleyin.
  2. Hata Kaynağı target değerine sahipse bu, hedef/arka uç sunucusu tarafından Apigee'ye gönderilen yanıtta, boyutu Apigee Edge'deki izin verilen sınırdan daha büyük olan başlıklar olduğunu gösterir.
  3. Aşağıdaki yöntemlerden birini kullanarak hedef/arka uçtan gelen yanıtta, boyutu izin verilen sınırdan büyük olan başlıklar olduğunu doğrulayabilirsiniz:

    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 bölümüne 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, faultstring bölümünde yanıtın, toplam boyutu izin verilen sınırı aşan üstbilgilere sahip olduğunu unutmayın.

    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/özel bulut kullanıcısıysanız arka uç sunucusundan veya arka uç sunucusuna istekte bulunmanıza izin verilen başka bir makineden doğrudan arka uç sunucusuna istekte bulunun.
    2. Özel bulut kullanıcısıysanız isteği bir mesaj işlemcisinden arka uç sunucusuna da gönderebilirsiniz.
    3. Arka uç sunucusundan alınan yanıtı inceleyin ve özellikle yanıtta iletilen başlıkların 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ı aştığını tespit ederseniz 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 büyük boyutlara sahip. Bu durum, Apigee Edge'de izin verilen sınırı aştığı için bu hataya neden oluyor.

    Mesaj işleyici günlükleri

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

    Özel Cloud kullanıcısıysanız yanıt başlıkları boyutunun Apigee Edge'deki izin verilen sınırı aşıp aşmadığını doğrulamak için Mesaj İşleyici günlüklerini kullanabilirsiniz.

    1. Mesaj İşleyici günlüklerini kontrol edin:

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

    2. Belirli bir süre boyunca (sorun geçmişte yaşandıysa) 502 hataları olup olmadığını veya 502 ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. Aşağıdaki arama dizesini kullanabilirsiniz:
      grep -ri "response headers size exceeding"
      
    3. system.log ile ilgili aşağıdaki gibi satırlar görürsünüz. Yanıt üstbilgilerinin boyutu sizin durumunuzda farklılık 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ır almaz ve başlıkların toplam boyutunun 25 KB'tan büyük olduğunu tespit ederse durur ve şu hatayı verir:

      response headers size exceeding 25,600

      Bu, Toplam Başlık Boyutu'nun 25 KB'tan fazla olduğunu ve Apigee'nin, boyut 25 KB sınırını aşmaya başladığında hata kodunu protocol.http.TooBigHeaders olarak döndürdüğünü gösterir.

Çözünürlük

Boyutu düzelt

1. seçenek [Önerilen]: Hedef sunucu uygulamasının, Apigee sınırını aşan başlık boyutu göndermesini engelleyin

  1. Sınırlar bölümünde tanımlandığı gibi, belirli hedef sunucunun yanıt başlığı boyutunu izin verilen sınırdan daha fazla göndermesinin nedenini analiz edin.
  2. Bu durum istenmiyorsa arka uç sunucu uygulamanızı, boyutu Apigee Edge'de izin verilen sınırın altında olan yanıt üstbilgilerini gönderecek şekilde değiştirin.
  3. Üstbilgi bilgilerinin yanıt gövdesiyle birlikte gönderilip gönderilemeyeceğini kontrol edin.
  4. Mümkünse üstbilgiye eklemeyi planladığınız büyük boyutlu bilgileri yanıt gövdesinde gönderin. Bu şekilde, yanıt başlığı sınırını aşmazsınız.

CwC

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

Apigee, yanıt üstbilgileri boyut sınırını artırmasına olanak tanıyan bir CwC özelliği sağlar. Ayrıntılar için: Mesaj İşleyici için sınırları yapılandırma

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları'nda İstek/Yanıt Başlığı Boyutu için belirtilen izin verilen sınırı aşan başlık boyutları göndermemesini bekler.

  1. Herkese açık bulut kullanıcısıysanız İstek ve Yanıt başlıkları boyutu için maksimum sınır, Apigee Edge Sınırları'ndaki İstek/Yanıt Başlığı boyutu için belirtilen sınırla aynıdır.
  2. Özel bulut kullanıcısıysanız İstek ve Yanıt başlıkları boyutu için varsayılan maksimum sınırı değiştirmiş olabilirsiniz (önerilen bir uygulama olmasa da). Mevcut sınırı kontrol etme başlıklı makaledeki talimatları uygulayarak maksimum yanıt başlığı boyutu sınırını belirleyebilirsiniz.

Mevcut sınır nasıl kontrol edilir?

Bu bölümde, tesisin HTTPResponse.headers.limit Mesaj İşleyiciler'de yeni bir değerle güncellendiğinin nasıl doğrulanacağı açıklanmaktadır.

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

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

Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Toplanması gereken teşhis bilgileri başlıklı makaleyi inceleyin.

Teşhis bilgilerini toplamalı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'si adı
  • 502 hatasını yeniden oluşturmak için kullanılan curl komutunun tamamı
  • API istekleri için izleme dosyası
  • Hedef/arka uç sunucudan gelen yanıtın üst bilgilerin boyutuyla birlikte tam çıktısı

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

  • Başarısız olan istekler için gözlemlenen hata mesajının tamamı
  • Kuruluş adı
  • Ortam adı
  • API proxy paketi
  • Başarısız olan API isteklerinin izleme dosyası
  • 502 hatasını yeniden oluşturmak için kullanılan curl komutunun tamamı
  • Hedef/arka uç sunucusundan gelen yanıtın, üst bilgilerin boyutuyla birlikte tam çıktısı
  • NGINX erişim günlükleri /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Nerede: 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