502 Bozuk Ağ Geçidi - TooBigLine

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.TooBigLine 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":"response line size exceeding 2,048",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Olası nedenler

Bu hata, reklamveren tarafından gönderilen Yanıt Satırı boyutunun hedef/arka uç sunucusundan Apigee'ye HTTP yanıtının bir parçası olarak Edge izin verilen maksimum değerden büyük Apigee Edge'de kullanılamaz.

Bu hatanın olası nedenlerine bakmadan önce, Yanıt-Satırı'nın ne anlama geldiğini anlayalım. ve boyutunun nasıl kontrol edileceği.

Yanıt Satırını Anlama

Tipik bir HTTP yanıtı üç bölümden oluşur:

  1. Status-Line (Apigee'de Yanıt Satırı olarak anılır)
  2. ( HTTP üstbilgileri kümesi )
  3. [ Metin ]

Yanıt Satırı üç bölümden oluşur: protokol sürümü ve ardından sayısal durum kodu ve ilişkili metin ifadesi için aşağıdaki adımları uygulayın:

Response-Line   = <HTTP-Version> <Status-Code> <Reason-Phrase>

Hedef/arka uç sunucu uygulaması tarafından bir HTTP yanıtı gönderildiğinde, gönderilen, yukarıda açıklandığı gibi Yanıt Satırı'nı temsil eder. Bunu, ardından şu gelir: başlıkları ve yanıt gövdesi/yükü.Aşağıdaki örnek ekran görüntüsünde, curl isteği, İstek bölümü ve Yanıt kısmı ( yanıt-satırı) kaldırın.

Yanıt satırı boyutunu anlama

  1. Yukarıda açıklanan örnekte, yanıttaki başlangıç satırı (ilk satır) da aşağıdaki şekilde Yanıt Satırı olarak adlandırılır:

    HTTP/1.1 200 OK
    

    Bu yanıt satırı 15 ASCII characters içerdiğinden boyutu ~15 bytes. Bu, içinde olduğundan izin verilen sınırı aştığında, yanıt herhangi bir uyarı olmadan istemciye hatalarının sayısı.

  2. Benzer şekilde faultstring Yukarıda gösterilen hata mesajı "response line size exceeding 2,048" içeriyor. Bu, HTTP yanıtındaki Yanıt Satırı'nın, hedef/arka uç sunucu tarafından gönderilen 2.048 baytı aştı.

Geniş yanıt hatlarını anlama

Tanımına göre Durum Satırı (burada Yanıt Satırı olarak anılır) ve tipik HTTP istekleri ve boyut, Apigee Edge'de tanımlanan varsayılan sınır olan 2 K'den çok daha küçük olur Dolayısıyla, sınıra ulaşabilirsiniz. Bununla birlikte, bu sınırı aşabileceğiniz bazı olası senaryolar şunlardır:

  1. Hedef/arka uç sunucusu bir HTTP sistemi değil. HTTP olmayan bir cihazla yanıt veriyor olabilir tıklayın.
  2. Hedef/arka uç sunucusunda sorunlar var ve HTTP'nin parçası olarak uzun bir Yanıt Satırı gönderiyor tıklayın.

Bu konuda daha fazla bilgi için: Hata protokolü.http.TooBigLine, "2.048'i aşan yanıt satırı boyutu alınıyor.

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 satırı boyutu izin verilen sınırdan büyük Apigee Edge'e verilen HTTP yanıtı Apigee Edge'de izin verilen sını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.TooBigLine hata koduna sahip bir hücre seçin: aşağıda gösterilmiştir:

    ( resmi büyüt)

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

    ( resmi büyüt)

  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.TooBigLine.
  11. Hata Kaynağı için target ve Hata Kod, protocol.http.TooBigLine değerine sahiptir ve bu değer, hedef/ arka uç sunucusundan alınan HTTP yanıtının Yanıt Satırı boyutu şundan büyüktür: Apigee Edge'de izin verilen maksimum sınır.

İzleme aracı

  1. İzleme oturumunu etkinleştir ve şunlardan 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ı yapın ve 502 Bad Gateway hatasını yeniden oluşturun.
  2. Başarısız isteklerden birini seçin ve izini inceleyin.
  3. İzlemenin farklı aşamalarından yararlanın ve hatanın nerede olduğunu bulun meydana geldi.
  4. Hatayı genellikle flowinfo Hata içinde Aşağıda gösterildiği gibi İstek hedef sunucuya gönderildi aşamasından sonra:

    İzdeki hatanın değerlerini not edin:

    • hata: response line exceeding 2,048
    • error.class: com.apigee.errors.http.server.BadGateway

    Bu, Apigee Edge'in (İleti İşlemci bileşeni) hatayı yanıt satırı boyutu nedeniyle arka uç sunucusundan yanıt alır almaz izin verilen sınırı aşıyor.

  5. Bu hata mesajını, istemciye gönderilen Yanıt Gönderildi Müşteri aşamasını aşağıda görebilirsiniz:

    ( resmi büyüt)

  6. İzdeki hatanın değerlerini not edin:
    • Hata: 502 Bad Gateway.
    • Hata İçeriği: {"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
  7. Ayrıca, izde AX (Kayıtlı Analytics Verileri) aşamasına da gidebilirsiniz ve hata ayrıntılarını görmek için bu simgeyi tıklayın.

    ( resmi büyüt)

    Aşağıdakilerin değerini unutmayın:

    İstek başlıkları Değer
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target
    Hata İçeriği : Gövde {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}

NGINX

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

  1. Private Cloud kullanıcısıysanız NGINX erişim günlüklerini kullanarak şunları yapabilirsiniz: HTTP 502 hatalarıyla ilgili önemli bilgileri belirler.
  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 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
  4. X-Apigee-fault-code'da 502 hatası bulursanız protocol.http.TooBigLine değeriyle eşleşir ve ardından X-Apigee-fault-source.'un değerini ifade eder.

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

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

Neden: Yanıt Satırı boyutu izin verilen sınırdan fazla

Teşhis

  1. API kullanılarak gözlemlenen hatanın Hata Kodu ve Hata Kaynağı'nı belirleme Aşağıdaki bölümde açıklandığı şekilde İzleme, İzleme aracı veya NGINX erişim günlükleri Yaygın teşhis adımları.
  2. Hata Kaynağı target değerine sahipse bu durum, Hedef/arka uç sunucu uygulaması tarafından Apigee'ye gönderilen Yanıt Hattı boyutu Apigee Edge'de izin verilen sınır.
  3. Yanıt satırı boyutunun 2 KB'lık sınırı aştığını doğrulamak için aşağıdaki kodu kullanarak aşağıdaki yöntemlerden birini tercih edebilirsiniz:

    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

    Örnek hata mesajı:

    "faultstring":"response line size exceeding 2,048"
    

    Yukarıdaki faultstring, yanıt satırı boyutunun izin verilen sınırı aştığını gösteriyor izin verilmelidir.

    Gerçek istek

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

    Hedef/arka uç sunucuya gönderilen gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:

    1. Yanıt satırının boyutunu doğrulamak
    2. URI boyutunun Apigee Edge'de izin verilen sınır varsa düşünmesi gerekir.

      Hedef/arka uç sunucusundan alınan örnek yanıt:

      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
      

      Yukarıdaki örnekte, Yanıt Satırı HTTP/1.1 200 1111…<trimmed>...11111111 2 KB'tan büyük, yani 2'den fazla K ASCII karakteri.

      Başka bir istemci kullanıyorsanız istemci günlüklerini inceleyip kullanarak Apigee Edge'e gönderilen Yanıt Hattı'nın boyutunu öğrenebilirsiniz.

    İleti işleyen günlükleri

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

    Private Cloud kullanıcısıysanız Mesaj İşleyici günlüklerini kullanarak şunları yapabilirsiniz: yanıt satırı boyutunun Apigee Edge'de izin verilen sınır.

    1. API Monitoring, Trace aracını kullanarak başarısız isteğin mesaj kimliğini belirleyin. Sık kullanılan teşhis adımları bölümünde açıklandığı şekilde NGINX erişim günlükleri.
    2. İleti İşleyen günlüğünde ileti kimliğini arayın:

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

    3. system.log sağlayıcısından şuna benzer satırlar göreceksiniz:

      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)
      

      Yukarıdaki message = response line size exceeding 2,048 metni hata mesajı, yanıt satırı boyutunun 2 KB'tan fazla olduğunu belirtir. Dolayısıyla, Apigee Edge istisnayı devre dışı bırakır ve bir 502 durum kodu hata kodu protocol.http.TooBigline gönderir.

Çözünürlük

Boyutu sabitle

1. Seçenek [Önerilen]: Gönderilmemesi gereken hedef/arka uç sunucu uygulamasını düzeltin İzin verilen sınırın üzerinde olan yanıt satırları

  1. Belirli bir müşterinin daha büyük boyutta bir Yanıt Satırı göndermesinin nedenini analiz edin Sınırlar bölümünde tanımlanan izin verilen sınırdan daha fazla.
  2. İstenmiyorsa hedef/arka uç sunucu uygulamanızı izin verilen sınırdan daha küçük bir Yanıt Satırı gönderir.
  3. İsterseniz ve yanıt satırından daha büyük bir Yanıt Satırı göndermek istiyorsanız izin verilen sınır değerini görüyorsanız sonraki seçeneklere gidin.

CwC

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

Apigee, bir CwC sunar. özelliğini kullanmanızı öneririz. Ayrıntılar için bkz. Mesaj İşleyen'de Yanıt Satırı sınırını belirleyin.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun İstek/Yanıt Satırları göndermemesini bekler boyutları İstek/Yanıt Satırı Sınırı için belgelenen izin verilen sınırın üzerinde olan Apigee Edge Limits'te kullanıma sunulmuştur.

  1. Herkese Açık Bulut kullanıcısıysanız İstek ve Yanıt Satırı boyutu, İstek/Yanıt Satırı boyutu için Apigee Edge Sınırları.
  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). Maksimum Yanıt Satırı boyut sınırını aşağıdaki talimatları uygulayarak belirleyebilirsiniz: Geçerli sınır nasıl kontrol edilir?

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

Bu bölümde, HTTPResponse.line.limit mülkünün şu özelliklere sahip olduğunu nasıl doğrulayacağınız açıklanmaktadır: Mesaj İşleyicilerde yeni bir değerle güncellendi.

  1. İleti İşleyici makinesinde özelliği arayın. HTTPResponse.line.limit /opt/apigee/edge-message-processor/conf dizini ve için kontrol et: hangi değerin ayarlandığını aşağıda gösterildiği gibi görebilirsiniz:
    grep -ri "HTTPResponse.line.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.line.limit=2k
    
    .
  3. Yukarıdaki örnek çıkışta HTTPResponse.line.limit özelliğine dikkat edin. http.properties içinde 2k değeriyle ayarlandı.

    Bu, Özel için Apigee'de yapılandırılan Yanıt Satırı boyutu sınırının olduğunu gösterir. Bulut boyutu 2 KB'tır.

Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız şu sayfaya 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ı

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 curl komutunu tamamlayın
  • 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