502 Bozuk Ağ Geçidi - TooBigLine

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

Olası nedenler

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

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

Yanıt Satırını Anlama

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

  1. Durum Satırı (Apigee'de Yanıt Satırı olarak kullanılır)
  2. ( HTTP üstbilgileri kümesi )
  3. [ Gövde ]

Yanıt Satırı üç bölümden oluşur: protokol sürümü, ardından bir sayısal durum kodu ve aşağıda gösterildiği gibi ilişkilendirilmiş metin ifadesi:

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

Hedef/arka uç sunucu uygulaması tarafından bir HTTP yanıtı gönderildiğinde, gönderilen ilk satır yukarıda açıklandığı gibi Yanıt Satırı'nı temsil eder. Bunu üst bilgiler ve yanıt gövdesi/yükü izler.Aşağıdaki örnek ekran görüntüsünde tipik bir curl isteği, İstek bölümü ve Yanıt bölümü (Yanıt Satırı ile birlikte) gösterilmektedir.

Yanıt Satırı boyutunu anlama

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

    HTTP/1.1 200 OK
    

    Bu Yanıt Satırı, 15 ASCII characters içerdiği için ~15 bytes değerine sahip. Bu sınır Apigee Edge'de izin verilen sınır dahilinde olduğundan yanıt, Apigee Edge tarafından hiçbir hata olmadan istemciye geri gönderilir.

  2. Benzer şekilde, yukarıda gösterilen Hata mesajındaki faultstring bölümüne baktığınızda "response line size exceeding 2,048" değerini içerir. Bu,hedef/arka uç sunucusu tarafından gönderilen HTTP yanıtındaki Yanıt Satırı'nın 2.048 baytı aştığını belirtir.

Geniş yanıt satırını anlama

Status-Line (burada Yanıt Satırı olarak anılır) tanımına ve tipik HTTP isteklerine ve yanıtına göre boyut, Apigee Edge'de tanımlanan varsayılan sınır olan 2 K'dan çok daha küçük olur. Bu nedenle sınıra ulaşamayabiliriz. Ancak, bu sınırı aşabileceğiniz bazı olası senaryolar aşağıda belirtilmiştir:

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

Bu konu hakkında daha fazla bilgi için şu makaleyi okuyun: Getting error Protocol.http.TooBigLine, "Yanıt satırı boyutu 2.048'i aşıyor.

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 HTTP yanıtının bir parçası olarak hedef/arka uç sunucusu tarafından gönderilen Yanıt Satırı'nın boyutu, Apigee Edge'de izin verilen sınırın üzerindedir 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.TooBigLine hata koduna sahip bir hücre seçin:

    ( büyük resmi göster)

  8. protocol.http.TooBigLine 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.

  10. Günlükler penceresinde aşağıdaki ayrıntıları dikkate alın:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.TooBigLine.
  11. Hata Kaynağı target değerine ve Hata Kodu protocol.http.TooBigLine değerine sahipse bu durum, hedef/ arka uç sunucusundan gelen HTTP yanıtının Yanıt Satırı boyutunun Apigee Edge'de izin verilen maksimum sınırdan daha büyük 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.
    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 flowinfo Hatası bölümünde bulabilirsiniz:

    İzlemedeki hatanın değerlerini not edin:

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

    Bu durum, Apigee Edge'in (Mesaj İşleyici bileşeni) izin verilen sınırı aşan bir Yanıt Satırı boyutu nedeniyle arka uç sunucusundan yanıt alır almaz hatayı bildirdiğini gösterir.

  5. Aşağıda gösterildiği gibi Yanıt İstemciye Gönderildi aşamasında istemciye gönderilen hata mesajını görürsünüz:

    ( büyük resmi göster)

  6. İzlemedeki 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, izdeki AX (Analytics Verileri Kaydedildi) aşamasına gidip hata ayrıntılarını görmek için bunu tıklayabilirsiniz.

    ( büyük resmi göster)

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

    İ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 HTTP 502 hatalarıyla 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 502 hatası olup olmadığını (sorun geçmişte olduysa) veya 502 nedeniyle başarısız olan isteklerin 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 yukarıdaki örnek giriş, X- Apigee-fault-code ve X-Apigee-fault-source için aşağıdaki değerlere sahiptir:

    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 büyük

Teşhis

  1. API Monitoring, İzleme aracı veya NGINX erişim günlüklerini kullanarak gözlemlenen hata için Yaygın teşhis adımları bölümünde açıklandığı şekilde Hata Kodu ve Hata Kaynağı'nı belirleyin.
  2. Hata Kaynağı target değerine sahipse bu durum, hedef/arka uç sunucu uygulaması tarafından Apigee'ye gönderilen Yanıt Satırı boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğu anlamına gelir.
  3. Yanıt Satırı boyutunun izin verilen 2 KB'lık sınırı aştığını 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.

    Örnek hata mesajı:

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

    Yukarıdaki faultstring, Yanıt Satırı boyutunun izin verilen 2 KB sınırını aştığını gösterir.

    Gerçek istek

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

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

    1. Yanıt Satırı'nın boyutunu doğrulama
    2. URI boyutunun Apigee Edge'de izin verilen sınırın üzerinde olduğunu görürseniz sorunun nedeni budur.

      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üktür, yani 2'den fazla K ASCII karakteri içermektedir.

      Başka bir istemci kullanıyorsanız istemci günlüklerini inceleyebilir ve Apigee Edge'e gönderilen Yanıt Satırı'nın boyutunu bulmaya çalışabilirsiniz.

    Mesaj İşleyici günlükleri

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

    Private Cloud kullanıcısıysanız Yanıt Satırı 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. API Monitoring, Trace aracı veya NGINX erişim günlüklerini kullanarak başarısız isteğin mesaj kimliğini Yaygın teşhis adımları bölümünde açıklandığı şekilde belirleyin.
    2. İleti İşleyici günlüğünde ileti kimliğini arayın:

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

    3. system.log alanında aşağıdakine benzer satırlar bulacaksınız:

      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 hata mesajındaki message = response line size exceeding 2,048 metni, Yanıt Satırı boyutunun 2 KB'tan büyük olduğunu göstermektedir. Bu nedenle Apigee Edge bu durumu ortadan kaldırarak istemci uygulamalarına protocol.http.TooBigline hata kodu içeren bir 502 durum kodu döndürür.

Çözünürlük

Boyutu düzelt

1. Seçenek [Önerilen]: Hedef/arka uç sunucu uygulamasını, izin verilen sınırın üzerinde Yanıt Satırları göndermeyecek şekilde düzeltin

  1. Belirli bir istemcinin, Sınırlar bölümünde tanımlanan izin verilen sınırın üzerinde bir boyuttaki Yanıt Satırı gönderme nedenini analiz edin.
  2. Bu istenen bir durum değilse hedef/arka uç sunucu uygulamanızı değiştirerek izin verilen sınırın altında bir Yanıt Satırı boyutunu gönderin.
  3. Bu tercih ediliyorsa ve izin verilen sınırın üzerinde bir Yanıt Satırı boyutu göndermek istiyorsanı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, Yanıt Satırı boyut sınırını artırmaya olanak tanıyan bir CwC özelliği sunar. Ayrıntılar için İleti İşleyici'de Yanıt Satırı sınırını ayarlama bölümüne göz atın.

Sınırlar

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

  1. Herkese Açık Bulut kullanıcısıysanız İstek ve Yanıt Satırı boyutu için maksimum sınır, Apigee Edge Sınırları'ndaki İstek/Yanıt Satırı boyutu bölümünde belirtildiği şekildedir.
  2. Private Cloud kullanıcısıysanız İstek ve Yanıt Satırı 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 satırı boyutu sınırını belirleyebilirsiniz.

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

Bu bölümde, HTTPResponse.line.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.line.limit özelliğini arayın ve aşağıda gösterildiği gibi hangi değerin ayarlandığını kontrol edin:
    grep -ri "HTTPResponse.line.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.line.limit=2k
    
  3. Yukarıdaki örnek çıkışta, HTTPResponse.line.limit özelliğinin http.properties içinde 2k değeriyle ayarlandığına dikkat edin.

    Bu, Private Cloud için Apigee'de yapılandırılan Yanıt Satırı boyutu sınırının 2 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 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 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
  • 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