502 Bozuk Ağ Geçidi - TooBigBody

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Belirti

İstemci uygulaması 502 Bad Gateway HTTP durum kodunu hata koduyla alıyor protocol.http.TooBigBody API çağrılarına yanıt olarak kullanılı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":"Body buffer overflow",
      "detail":{
         "errorcode":"protocol.http.TooBigBody"
      }
   }
}

Olası nedenler

Bu hata, hedef/arka uç sunucusu tarafından parça olarak Apigee Edge'e gönderilen yük boyutu oranında HTTP yanıtının olması, Apigee Edge'de izin verilen sınırdan büyüktür.

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

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Yanıt yük boyutu izin verilen sınırdan büyük Apigee'ye HTTP yanıtının bir parçası olarak hedef/arka uç sunucu tarafından gönderilen yük boyutu: Apigee'de izin verilen sınırdan daha fazla. Edge Herkese Açık ve Private Cloud kullanıcıları
Yanıt yükü boyutu, izin verilen sınırı şundan sonra aşıyor: dekompresyon HTTP'nin bir parçası olarak hedef/arka uç sunucusu tarafından sıkıştırılmış biçimde gönderilen yük boyutu Apigee'ye verilen yanıt, Apigee tarafından sıkıştırılmış dosya açıldığında izin verilen sınırdan daha fazladır. Edge Herkese Açık ve Private Cloud kullanıcıları

Sık kullanılan 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. Apigee Edge kullanıcı arayüzünde uygun role sahip olur.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analiz > API İzleme > İnceleme sayfası.
  4. Hataları gözlemlediğiniz zaman aralığını seçin.
  5. Hata kodunu daraltmak için Proxy filtresini seçebilirsiniz.
  6. Zaman ile Hata Kodu'nun grafiğini çizin.
  7. protocol.http.TooBigBody hata koduna sahip bir hücre seçin: aşağıda gösterilmiştir:

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

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

  10. Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.TooBigBody.
  11. Hata Kaynağı'nın değeri target ve Hata Kodu ise protocol.http.TooBigBody değerine sahipse bu, HTTP hedef/ arka uç sunucusundan alınan yanıtın yanıt yük boyutu Apigee Edge'de sınıra izin verildi.

Trace

İzleme aracını kullanarak hatayı teşhis etmek için:

  1. İzleme oturumunu etkinleştirin ve şunlardan birini yapın:
    • 502 Bad Gateway hatasının oluşmasını bekleyin veya
    • Sorunu yeniden oluşturabiliyorsanız API çağrısını oluşturun ve 502 Bad Gateway hata.
  2. Başarısız isteklerden birini seçin ve izini inceleyin.
  3. İzlemenin farklı aşamaları arasında gezinin ve hatanın nerede oluştuğunu bulun.
  4. Hedeften alınan yanıtın hemen ardından Hata aşamasına geçin. sunucu aşamasını görebilirsiniz:

    İzdeki hatanın değerlerini not edin:

    • hata: Body buffer overflow
    • error.class: com.apigee.errors.http.server.BadGateway

    Bu, Apigee Edge'in (İleti İşlemci bileşeni) hata mesajını alır almaz Yük boyutu izin verileni aştığından arka uç sunucusundan yanıt alır. limit.

  5. Hatayı, İstemciye Gönderildi aşamasında aşağıda gösterildiği gibi görürsünüz:

  6. İzdeki hatanın değerlerini not edin. Yukarıdaki örnek izde şunlar gösterilir:
    • hata: 502 Bad Gateway
    • Hata İçeriği: {"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
  7. Farklı senaryolar için aşağıda gösterildiği gibi Hedef sunucudan alınan yanıt aşamasına gidin:

    Sıkıştırılmamış

    1. senaryo: Yanıt yükü sıkıştırılmamış biçimde gönderilir

    İzdeki hatanın değerlerini not edin:

    • Hedef sunucudan alınan yanıt: 200 OK
    • Content-Length (Yanıt Başlıkları bölümünden): ~11 MB

    Sıkıştırılmış

    2. senaryo: İstek yükü sıkıştırılmış biçimde gönderildi

    İzdeki hatanın değerlerini not edin:

    • Hedef sunucudan alınan yanıt: 200 OK
    • Content-Encoding: Yanıt Başlıkları'nda bu üstbilgiyi görüyorsanız bölümündeki değere dikkat edin. Örneğin, bu örnekte değer gzip
  8. Yanıt İçeriği bölümünün altındaki Gövde bölümüne dikkat edin:

    {"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
    
    .
  9. İzlemedeki AX (Analytics Verilerinin Kaydedilen) Aşamasına gidip tıklayın simgesini tıklayın.

  10. Aşama Ayrıntıları'nda Değişkenler Okunan bölümüne gidin ve target.received.content.length değerleri şunları gösterir:
    • Sıkıştırılmamış biçimde gönderildiğinde yanıt yükünün gerçek boyutu ve
    • Yükün yeterli olduğu durumlarda, Apigee tarafından sıkıştırılmış deprem işlemi yapıldığında yanıt yükünün boyutu sıkıştırılmış biçimde gönderilir. Bu değer, her zaman izin verilen sınırı (10 MB) olarak ayarlayın.
    ziyaret edin.

    Sıkıştırılmamış

    1. senaryo: Yanıt yükü sıkıştırılmamış biçimde gönderilir

    target.received.content.length değerine dikkat edin:

    İstek başlıkları Değer
    target.received.content.length Yaklaşık 11 MB

    Sıkıştırılmış

    2. senaryo: İstek yükü sıkıştırılmış biçimde gönderildi

    target.received.content.length değerine dikkat edin:

    İstek Başlığı Değer
    target.received.content.length Yaklaşık 10 MB
  11. Aşağıdaki tabloda, Apigee tarafından neden 502 hatasının iki senaryoda target.received.content.length değerine göre uyarlayabilirsiniz:

    Senaryo target.received.content.length değeri Hatanın nedeni
    Sıkıştırılmamış biçimde yanıt yükü Yaklaşık 11 MB Boyut > 10 MB'lık izin verilen sınır
    Sıkıştırılmış biçimde yanıt yükü Yaklaşık 10 MB

    Sıkıştırma açıldığında boyut sınırı aşıldı

NGINX

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

  1. Private Cloud kullanıcısıysanız aşağıdakileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz: HTTP 502 hatalarıyla ilgili önemli bilgiler.
  2. NGINX erişim günlüklerini kontrol edin:

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

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

  3. Belirli bir sürede (varsa) 502 hatası olup olmadığını görmek için arama yapın olup olmadığını kontrol edin) veya hâlâ başarısız olan bir istek varsa 502
  4. X-Apigee-fault-code eşleştirmesinde 502 hatası bulursanız önce protocol.http.TooBigBody değerini, sonra da X-Apigee-fault-source.

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

    NGINX erişim günlüğünden alınan yukarıdaki örnek giriş, X-Apigee- hata kodu ve X-Apigee-fault-source:

    Yanıt Başlıkları Değer
    X-Apigee-fault-code protocol.http.TooBigBody
    X-Apigee-fault-source target

Neden: Yanıt Yük Boyutu, izin verilen sınırın üzerinde

Teşhis

  1. Aşağıdakiler için Hata Kodu, Hata Kaynağı ve Yanıt Yük Boyutu'nu belirleyin aşağıdaki sayfada açıklandığı gibi API İzleme, İzleme aracı veya NGINX erişim günlükleri kullanılırken gözlemlenen hata 1. Senaryo ile sık kullanılan teşhis adımları.
  2. Hata Kaynağı target değerine sahipse bu, yanıtın hedef/arka uç sunucu tarafından Apigee'ye gönderilen yük boyutu Apigee Edge'de izin verilen sınır.
  3. 1. adımda belirlendiği şekilde Yanıt Yük Boyutu'nu doğrulayın.
  4. Yanıt yük boyutunun gerçekten > 10 MB'lık sınıra izin verilir. Bunun için şu adımları uygulayarak gerçek bir yanıt verin:
    1. Hedef/arka uç sunucuya gönderilen gerçek isteğe erişiminiz yoksa ardından Çözünürlük'e gidin.
    2. Hedef/arka uç sunucuya gönderilen gerçek isteğe erişiminiz varsa şu adımları uygulayın:
      1. Herkese Açık Bulut/Private Cloud kullanıcısıysanız doğrudan sunucuyu kullanarak, arka uç sunucusunun kendisinden veya başka bir makineden arka uç sunucuya istek göndermesine izin verilir.
      2. Private Cloud kullanıcısıysanız arka uç sunucusuna gidin.
      3. Şunu kontrol ederek yanıtta iletilen yükün boyutunu doğrulayın: Content-Length üstbilgisi.
      4. Yük boyutunun Apigee Edge'de izin verilen sınır varsa .

    Arka uç sunucusundan Örnek Yanıt:

    curl -v https://BACKENDSERVER-HOSTNAME/testfile
    
    * About to connect() to 10.14.0.10 port 9000 (#0)
    *   Trying 10.14.0.10...
    * Connected to 10.14.0.10 (10.148.0.10) port 9000 (#0)
    > GET /testfile HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: 10.14.0.10:9000
    > Accept: */*
    >
    < HTTP/1.1 200 OK
    < Accept-Ranges: bytes
    < Content-Length: 11534336
    < Content-Type: application/octet-stream
    < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT
    < Date: Wed, 30 Jun 2021 09:22:41 GMT
    <
    ----snipped----
    <Response Body>
    

    Yukarıdaki örnekte, değerini aştığı için bu hatanın nedeninin Content-Length: 11534336 (which is ~11 MB) olduğunu görebilirsiniz. izin verilen sınırlara tabidir.

Çözünürlük

Çözünürlük bölümüne bakın.

Neden: Yanıt Yük Boyutu, şu tarihten sonra izin verilen sınırı aşıyor dekompresyon

Yanıt yükü sıkıştırılmış biçimde ve yanıt başlığıyla gönderilirse Content-Encoding gzip, olarak ayarlandığında Apigee, yanıtı çözer yük. Apigee, dekompresyon açma işlemi sırasında yük boyutunun daha büyük olduğunu tespit ederse Apigee Edge'de izin verilen sınırdan aşılırsa daha fazla durur. baskıyı azaltır ve hemen yanıt verir 502 Bad Gateway ve protocol.http.TooBigBody hata kodu ile.

Teşhis

  1. Aşağıdakiler için Hata Kodu,Hata Kaynağı ve Yanıt Yük boyutu'nu belirleme aşağıdaki sayfada açıklandığı gibi API Monitoring, İzleme Aracı veya NGINX Access günlükleri kullanılırken gözlemlenen hata 2. Senaryo ile sık kullanılan teşhis adımları.
  2. Hata Kaynağı target değerine sahipse bu durum, hedef/arka uç uygulaması tarafından Apigee'ye gönderilen yanıt yükü boyutu Apigee Edge'de izin verilen sınır.
  3. 1. adımda belirlendiği şekilde Yanıt Yük Boyutu'nu doğrulayın.
    • Yük boyutu > 10 MB izin veriliyorsa hatanın nedeni budur.
    • Yük boyutu izin verilen sınır ~ 10 MB ise yanıt yükü olabilir. sıkıştırılmış biçimde aktarılır. Bu durumda, sıkıştırılmamış öğe boyutunu kontrol edin. yardımcı olabilir.
  4. Hedef/arka uçtan alınan yanıtın sıkıştırılmış biçimde gönderilip gönderilmediğini ve Sıkıştırılmamış boyut, aşağıdakilerden biri kullanılarak izin verilen sınırdan daha büyüktü: yöntemleri:

    Trace

    İzleme aracını kullanma:

    1. Başarısız istekle ilgili bir iz yakaladıysanız şurada ayrıntılı olarak açıklanan adımlara bakın: Trace ve
      1. target.received.content.length değerini belirleyin
      2. İstemciden gelen istekte Content-Encoding: gzip başlık
    2. target.received.content.length değeri izin verilen 10 MB civarındaysa sınırını ve Content-Encoding: gzip yanıt başlığını kullanıyorsanız bu bu hatanın nedeni hakkında bilgi edinin.

    Gerçek istek

    Gerçek istek kullanıldığında:

    1. Hedef/arka uç sunucuya gönderilen gerçek isteğe erişiminiz yoksa ardından Çözünürlük'e gidin.
    2. Hedef/arka uç sunucuya gönderilen gerçek isteğe erişiminiz varsa şu adımları uygulayın:
      1. Yanıtta iletilen yükün boyutunu Yanıtta Content-Encoding başlığı gönderildi.
      2. Content-Encoding yanıt başlığının gzip ve sıkıştırılmamış yük boyutu Apigee Edge'de izin verilen sınır o zaman bu hata mesajını alıyorsunuz.

        Arka uç sunucusundan alınan örnek yanıt:

        curl -v https://BACKENDSERVER-HOSTNAME/testzippedfile.gz
        
        * 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 /testzippedfile.gz 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-Encoding: gzip
        < Content-Type: application/x-gzip
        < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT
        < Testheader: test
        < Date: Wed, 07 Jul 2021 10:14:16 GMT
        < Transfer-Encoding: chunked
        <
        ----snipped----
        <Response Body>
        

        Yukarıdaki örnekte Content-Encoding: gzip üstbilgisi gönderilir ve yanıttaki testzippedfile.gz dosyasının boyutu şundan küçük: sınır, ancak sıkıştırılmamış testzippedfile dosyasının boyutu şu kadardı: Yaklaşık 15 MB.

    ziyaret edin.

    İleti işleyen günlükleri

    İleti işlemci günlüklerini kullanma:

    1. Private Cloud kullanıcısıysanız Mesaj İşleyici günlüklerini kullanarak şunları yapabilirsiniz: HTTP 502 hatalarıyla ilgili önemli bilgileri belirler.
    2. İleti İşleyici günlüklerini kontrol etme

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

    3. Belirli bir sürede 502 hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya hâlâ başarısız olan bir istek varsa 502 Aşağıdaki arama dizelerini kullanabilirsiniz:

      grep -ri "chunkCount"
      
      grep -ri "BadGateway: Body buffer overflow"
      
    4. system.log hesabından aşağıda gösterilenlere benzer satırlar bulacaksınız (TotalRead ile chunkCount sizin durumunuzda değişiklik gösterebilir):
      2021-07-07 09:40:47,012  NIOThread@7 ERROR HTTP.SERVICE -
      TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large.
      TotalRead 10489856 chunkCount 2571
      
      2021-07-07 09:40:47,012  NIOThread@7 ERROR HTTP.CLIENT -
      HTTPClient$Context.onInputException() :
      ClientInputChannel(ClientChannel[Connected:
      Remote:10.148.0.10:9000 Local:10.148.0.9:42240]@9155
      useCount=1 bytesRead=0 bytesWritten=182 age=23ms  lastIO=0ms
      isOpen=true).onExceptionRead exception: {}
      com.apigee.errors.http.server.BadGateway: Body buffer overflow
      
      2021-07-07 09:40:47,012  NIOThread@7 ERROR
      ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() :
      AbstractResponseListener.onError(HTTPResponse@77cbd7c4,
      Body buffer overflow)
      
    5. Sıkıştırma açma işlemi sırasında, İletiyi İşleyen toplam okuma baytı > 10 MB boyutundaysa durur ve aşağıdaki satırı yazdırır:

      Message is too large. TotalRead 10489856 chunkCount 2571

      Bu durumda Yanıt Yük Boyutu, 10 MB'tan fazla ve Apigee'nin boyut, 10 MB sınırını aşmaya başladığında hatayı bildirir (hata kodu: protocol.http.TooBigBody

Çözünürlük

Boyutu sabitle

1. seçenek [Önerilen]: Hedef sunucu uygulamasını, Apigee sınırını aşan yük boyutunu göndermeyecek şekilde düzeltin

  1. Belirli hedef sunucunun yanıt / yük boyutu gönderme nedenini analiz etme kapsamında tanımlanan izin verilen sınırdan fazla Sınırlar.
  2. İstenmiyorsa hedef sunucu uygulamanızı, yanıt / yük boyutu izin verilen sınırın altında.
  3. İstenirse ve izin verilenden daha fazla bir yanıt/yük göndermek istiyorsanız bir sonraki seçeneklere geçin.

İmzalanmış URL kalıbı

2. seçenek [Önerilen]: Apigee JavaÇağrısında imzalı URL kalıbı kullanın

10 MB'tan büyük yük için Apigee, Apigee JavaDraft, Edge Çağrıları: GitHub'daki İmzalanmış URL Oluşturucu örneği.

Canlı Yayın

3. seçenek: Akış özelliğini kullanma

API proxy'nizin çok büyük istekleri ve/veya yanıtları işlemesi gerekiyorsa şunları yapabilirsiniz: Apigee'de akışı etkinleştirin.

CwC

4. seçenek: Tampon sınırını artırmak için CwC özelliğini kullanma

Bu seçenek yalnızca, önerilen seçeneklerden hiçbirini kullanamadığınızda, varsayılan boyut artırıldığında performans sorunları yaşanabilir.

Apigee, İstek ve yanıt yük boyutunu artırmaya olanak tanıyan CwC özelliği limit. Ayrıntılı bilgi için Yönlendirici veya Mesaj İşlemcisinde mesaj boyutu sınırını belirleyin.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun içindeki Request/response size için belgelendiği üzere izin verilen sınır Apigee Edge Sınırları.

  1. Herkese açık Cloud kullanıcısıysanız istek ve yanıt için maksimum sınır yük boyutu, Request/response size için belirtildiği gibi Apigee Edge Limits.
  2. Private Cloud kullanıcısıysanız varsayılan maksimum sayıyı değiştirmiş olabilirsiniz. sınırı (önerilen bir uygulama olmasa bile) gerektirir. Maksimum istek yük boyutu sınırını, Geçerli sınır nasıl kontrol edilir?

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

Bu bölümde, mülkün HTTPResponse.body.buffer.limit, Mesajdaki yeni bir değerle güncellendi İşlemciler.

  1. İleti İşleyici makinesinde özelliği arayın. /opt/apigee/edge-message- processor/conf dizinindeki HTTPResponse.body.buffer.limit değerini girin ve hangi değerin aşağıda gösterildiği gibi ayarlandığını kontrol edin:

    grep -ri "HTTPResponse.body.buffer.limit" /opt/apigee/edge-message-processor/conf
    
  2. Yukarıdaki komuttan elde edilen örnek sonuç aşağıdaki gibidir:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.body.buffer.limit=10m
    
  3. Yukarıdaki örnek çıkışta, HTTPResponse.body.buffer.limit, şurada 10m değeriyle ayarlandı: http.properties.

    Bu, Apigee'de yapılandırılan istek yükü boyutu sınırının Private Cloud 10 MB'tır.

Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız adresine gidin. Teşhis bilgileri toplanmalıdır.

Teşhis bilgileri toplanmalıdır

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

Herkese açık Cloud 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 tam curl komutu
  • API istekleri için izleme dosyası
  • Hedef/arka uç sunucudan alınan yanıtın tamamı ve yükün boyutu

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

  • Başarısız istekler için tam hata mesajı gözlemlendi
  • 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 tam curl komutu
  • Hedef/arka uç sunucudan alınan yanıtın tamamı ve yükün boyutu
  • NGINX erişim günlükleri /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

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