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 502 Bad Gateway HTTP durum kodunu ve protocol.http.TooBigLine hata 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ç sunucu tarafından HTTP yanıtının bir parçası olarak Apigee Edge'e gönderilen Response-Line boyutu, Apigee Edge'deki izin verilen maksimum sınırdan büyükse oluşur.

Bu hatanın olası nedenlerine bakmadan önce yanıt satırının ne anlama geldiğini ve boyutunun nasıl kontrol edileceğini öğrenelim.

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 adlandırılır)
  2. ( HTTP üstbilgileri kümesi)
  3. [ Body ]

Yanıt satırı üç bölümden oluşur: Protokol sürümü, ardından sayısal durum kodu ve bunun ilişkili metin ifadesi (aşağıda gösterildiği gibi):

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 Response-Line'ı temsil eder. Bunu başlıklar ve yanıt gövdesi/yükü izler.Aşağıdaki örnek ekran görüntüsünde, tipik bir curl isteği, Request (İstek) bölümü ve Response (Yanıt) bölümü (Response-Line ile birlikte) gösterilmektedir.

Yanıt satırı boyutunu anlama

  1. Yukarıda bahsedilen örnekte, yanıttaki başlangıç satırı (ilk satır) Response-Line olarak da adlandırılır ve şu şekildedir:

    HTTP/1.1 200 OK

    Bu yanıt satırı, 15 ASCII characters içerdiğinden ~15 bytes boyutundadır. Bu, Apigee Edge'deki izin verilen sınır içinde olduğundan yanıt, Apigee Edge tarafından herhangi bir hata olmadan istemciye geri gönderilir.

  2. Benzer şekilde, yukarıda gösterilen hata mesajındaki faultstring simgesinde "response line size exceeding 2,048" bulunur. Bu,hedef/arka uç sunucu tarafından gönderilen HTTP yanıtındaki Response-Line'ın 2.048 baytı aştığını gösterir.

Büyük yanıt satırını anlama

Status-Line (burada Response-Line olarak adlandırılır) ve tipik HTTP istekleri ile yanıtın tanımına göre boyut, Apigee Edge'de tanımlanan 2 K varsayılan sınırından çok daha küçük olacaktır. Bu nedenle, sınıra ulaşmayabiliriz. Ancak bu sınırı aşabileceğiniz bazı olası senaryolar aşağıda verilmiştir:

  1. Hedef/arka uç sunucusu bir HTTP sistemi değildir. HTTP dışı bir yanıt veriyor olabilir.
  2. Hedef/arka uç sunucusunda sorunlar var ve HTTP yanıtının bir parçası olarak uzun bir yanıt satırı gönderiyor.

Bu konu hakkında daha fazla bilgiyi Getting error protocol.http.TooBigLine, "response line size exceeding 2,048 başlıklı makalede bulabilirsiniz.

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

Neden Açıklama Aşağıdaki ürünler için geçerli sorun giderme talimatları
Yanıt satırı boyutu, izin verilen sınırı aşıyor Hedef/arka uç sunucu tarafından Apigee Edge'e HTTP yanıtının bir parçası olarak gönderilen Response-Line'ın boyutu, 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.TooBigLine 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.TooBigLine

    ( 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.

  10. Günlükler penceresinde aşağıdaki ayrıntıları not edin:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.TooBigLine.
  11. Hata Kaynağı değeri target ve Hata Kodu değeri protocol.http.TooBigLine ise bu, hedef/ arka uç sunucudan gelen HTTP yanıtının, izin verilen maksimum Apigee Edge sınırından daha büyük bir yanıt satırı boyutuna 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. Hatayı genellikle aşağıdaki örnekte gösterildiği gibi flowinfo Error (Hata) bölümünde, Request sent to target server (İstek hedef sunucuya gönderildi) aşamasından hemen sonra bulabilirsiniz:

    İzlemedeki hata 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) arka uç sunucusundan yanıtı alır almaz izin verilen sınırı aşan bir yanıt satırı boyutu nedeniyle hatayı verdiğini gösterir.

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

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

  6. İzleme işlemindeki hata 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 izlemede AX (Analytics Verileri Kaydedildi) aşamasına gidip hatanın ayrıntılarını görmek için bu aşamayı tıklayabilirsiniz.

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

    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. Özel bulut kullanıcısıysanız HTTP 502 hatalarıyla 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 hataları 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.TooBigLine değeriyle eşleştiği 502 hataları bulursanız X-Apigee-fault-source değerini belirleyin.

    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:

    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ırın üzerinde

Teşhis

  1. API İzleme, İzleme Aracı veya NGINX erişim günlükleri kullanılarak gözlemlenen hatanın Hata Kodunu ve Hata Kaynağını belirleyin. Bu işlem, Genel teşhis adımları bölümünde açıklanmıştır.
  2. Hata Kaynağı değeri target ise bu, 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ğunu gösterir.
  3. Aşağıdaki yöntemlerden birini kullanarak yanıt satırı boyutunun izin verilen 2 KB sınırını aştığını 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.

    Ö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ç sunucu 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'nin boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğunu fark ederseniz sorunun nedeni budur.

      Hedef/arka uç sunucusundan ö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.000'den fazla ASCII karakteri içeriyor.

      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 işleyici günlükleri

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

    Özel 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. Genel teşhis adımları bölümünde açıklandığı gibi, API İzleme, İzleme aracı veya NGINX erişim günlüklerini kullanarak başarısız olan isteğin ileti kimliğini belirleyin.
    2. Mesaj İşleyici günlüğünde ileti kimliğini arayın:

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

    3. system.log ile ilgili aşağıdaki gibi satırlar görürsü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ında yer alan message = response line size exceeding 2,048 metni, yanıt satırı boyutunun 2 KB'tan büyük olduğunu gösterir. Bu nedenle, Apigee Edge istisna oluşturur ve istemci uygulamalarına hata kodu protocol.http.TooBigline ile birlikte 502 durum kodunu döndürür.

Çözünürlük

Boyutu düzelt

1. seçenek [Önerilen]: Hedef/arka uç sunucu uygulamasının, izin verilen sınırı aşan boyutta yanıt satırları göndermemesini sağlayın

  1. Belirli bir istemcinin, Sınırlar bölümünde tanımlanan izin verilen sınırı aşan boyutta bir yanıt satırı gönderme nedenini analiz edin.
  2. Bu durum istenmiyorsa hedef/arka uç sunucu uygulamanızı, izin verilen sınırdan daha küçük bir Response-Line gönderecek şekilde değiştirin.
  3. İsteniyorsa ve izin verilen sınırdan daha büyük bir boyutlu yanıt satırı 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ırmasına olanak tanıyan bir CwC özelliği sağlar. Ayrıntılar için İleti işlemcisinde yanıt satırı sınırını ayarlama başlıklı makaleyi inceleyin.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları'ndaki İstek/Yanıt Satırı Sınırı için belgelendiği gibi, boyutları izin verilen sınırı aşan İ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ı'nda İstek/Yanıt Satırı boyutu için belirtilen sınırdır.
  2. Özel bulut 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). Mevcut sınırı kontrol etme başlıklı makaledeki talimatları uygulayarak maksimum yanıt satırı boyutu sınırını belirleyebilirsiniz.

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

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

  1. Mesaj İşleyici makinesinde, HTTPResponse.line.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.line.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.line.limit=2k
  3. Yukarıdaki örnek çıktıda, HTTPResponse.line.limit özelliğinin http.properties içinde 2k değeriyle ayarlandığını unutmayın.

    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 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 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 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ı
  • 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