502 Hatalı Ağ Geçidi - Yanıt ileGövde

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.ResponseWithBody hata koduna sahip 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 mesajlarından biriyle karşılaşabilirsiniz:

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

Olası nedenler

Bu hata, arka uç sunucusundan Apigee Edge'e HTTP yanıtı 204 No Content ya da 205 Reset Content ise ancak yanıtta yanıt gövdesi ve/veya aşağıdaki başlıklardan birini ya da daha fazlasını içeriyorsa ortaya çıkar:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

RFC 7231, bölüm 6.3.5: 204 No Content ve RFC 7231, bölüm 6.3.6: 205 İçeriği Sıfırla spesifikasyonlarına göre, kaynak sunucu tarafından 204 No Content veya 205 Reset Content durum koduna sahip yanıt yükü gövdesinin parçası olarak ek içerik gönderilmemelidir. Content-Length, Content-Encoding veya Transfer-Encoding gibi yanıt başlıkları, yanıt yükünün boyutunu, türünü veya biçimini belirtir.

Bu nedenle Apigee Edge, aşağıdaki durumlarda istemciye protocol.http.ResponseWithBody hata koduna sahip 502 Bad Gateway durum kodu döndürür:

Arka uç sunucusundan alınan durum kodu
Arka uç sunucusundan gelen yanıt şunu içeriyor: 204 İçerik Yok 205 İçeriği Sıfırla
Yanıt Metni HATA HATA

Content-Length üst bilgi

(sıfır olmayan bir değere ayarlanmış)

HATA HATA

Content-Encoding

( Apigee Edge'de desteklenen kodlama olarak ayarlanmıştır)

HATA HATA YOK
Transfer-Encoding HATA HATA

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 gövdesi veya arka uç sunucusundan 204 yanıtı olan başlıklar Arka uç sunucusu, yanıt gövdesi ve/veya Content-Type, Content-Encoding ya da Transfer-Encoding üstbilgilerinden en az birini içeren bir 204 No Content veya 205 Reset Content yanıtı gönderir. 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 Kodu'nu Zamana göre çizin.
  6. Aşağıda gösterildiği gibi protocol.http.ResponseWithBody hata koduna sahip bir hücre seçin:

    ( büyük resmi göster)

  7. protocol.http.ResponseWithBody hata koduyla ilgili bilgileri aşağıda gösterildiği gibi görürsünüz:

    ( büyük resmi göster)

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

    ( büyük resmi göster)

  9. Günlükler penceresinde aşağıdaki ayrıntıları dikkate alın:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.ResponseWithBody.
  10. Hata Kaynağı target değerine ve Hata Kodu protocol.http.ResponseWithBody değerine sahipse bu durum, hatanın arka uç sunucusunun yanıt gövdesi ve/veya Olası nedenler bölümünde bahsedilen üst bilgilerle birlikte bir 204 No Content ya da 205 Reset Content durum kodu göndermesi nedeniyle oluştuğunu belirtir.

İzleme aracı

Hatayı İzle aracını kullanarak teşhis etmek için:

  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. Tüm FlowInfo'ları göster seçeneğinin etkin olduğundan emin olun:

  3. Başarısız isteklerden birini seçip izi inceleyin.
  4. İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
  5. 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:

    1. Senaryo

    1. Senaryo: Arka Uç Sunucusu, yanıt gövdesini ve/veya Olası nedenler bölümünde listelenen başlıklardan birini içeren 204 No Content durum koduyla yanıt veriyor.

    İzdeki aşağıdaki değerleri not edin:

    • hata: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    2. Senaryo

    2. Senaryo: Arka Uç Sunucusu, yanıt gövdesini ve/veya Olası nedenler başlıklı makalede listelenen üst bilgilerden birini içeren 204 No Content durum koduyla yanıt veriyor.

    İzdeki aşağıdaki değerleri not edin:

    • hata: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. İzdeki AX (Analytics Verileri Kaydedilen) aşamasına gidin ve bunu tıklayın.
  7. Aşama Ayrıntıları ve Hata Başlıkları bölümüne ilerleyin ve X-Apigee-fault-code ile X-Apigee-fault-source değerlerini aşağıda gösterildiği gibi belirleyin:

    ( büyük resmi göster)

  8. Sırasıyla X-Apigee-fault-code ve X-Apigee-fault-source are protocol.http.ResponseWithBody ve target değerlerini unutmayın. Bu, hatanın arka uç sunucusunun yanıt gövdesiyle ve/veya Olası nedenler bölümünde bahsedilen başlıklardan biriyle birlikte bir 204 No Content veya 205 Reset Content durum kodu göndermesi nedeniyle oluştuğunu belirtir.
    Hata Değer
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target

NGINX

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

  1. Private Cloud kullanıcısıysanız HTTP 502 Bad Gateway ile 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 protocol.http.ResponseWithBody hata koduna sahip 502 hatası (sorun geçmişte olduysa) veya 502 nedeniyle hâlâ başarısız olan bir istek olup olmadığını görmek için arama yapın.
  4. protocol.http.ResponseWithBody değeriyle eşleşen X-Apigee-fault-code ile herhangi bir 502 hatası bulursanız X-Apigee-fault-source değerini belirleyin.

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

    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.ResponseWithBody
    X-Apigee-fault-source target
  5. X-Apigee-fault-code ve X-Apigee-fault-source değerlerinin sırasıyla protocol.http.ResponseWithBody ve target olduğunu unutmayın. Bu, hatanın arka uç sunucusunun yanıt gövdesiyle ve/veya Olası nedenler bölümünde bahsedilen başlıklardan biriyle birlikte bir 204 No Content veya 205 Reset Content durum kodu göndermesi nedeniyle oluştuğunu belirtir.

Neden: Yanıt gövdesi veya arka uç sunucusundan 204 yanıtı olan başlıklar

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 Kodu protocol.http.ResponseWithBody ve Hata Kaynağı target değerine sahipse bu durum, arka uç sunucusunun yanıt gövdesi ve/veya Olası nedenler bölümünde bahsedilen başlıklardan biriyle birlikte 204 No Content ya da 205 Reset Content durum koduyla yanıt verdiğini gösterir.
  3. Arka uç sunucusunun gerçekten bir yanıt yükü gövdesi ve/veya Olası nedenler bölümünde belirtilen başlıklardan birini ya da daha fazlasını gönderip göndermediğini doğrulamak için aşağıdaki adımları uygulayabilirsiniz:

    1. Herkese Açık Bulut kullanıcısıysanız ve aynı API isteğini doğrudan herhangi bir sisteminizden arka uç sunucusuna gönderebiliyorsanız.

    2. Private Cloud kullanıcısıysanız arka uç sunucusuna aynı API isteğini doğrudan hatanın gözlemlendiği kuruluş ve ortamla ilişkilendirilmiş Mesaj İşleyicilerin birinden gönderebilirsiniz.
    3. Arka uç sunucusundan alınan yanıtı inceleyin ve yanıtın bir yanıt yükü gövdesi ve/veya yukarıda bahsedilen başlıklardan birini ya da daha fazlasını içerdiğini doğrulayın. Yanıtınız evetse bu hatanın nedeni budur.

      1. Örnek

      1. Örnek: Content-Encoding Header ile Arka Uç Sunucu Yanıtı 204

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      Bu örnekte, arka uç sunucusu 204 No Content durum kodu ve Content-Encoding: gzip ile yanıt verdi

      Örnek 2

      2. Örnek: Content-Length Header ile Arka Uç Sunucu Yanıtı 204

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      Bu örnekte, arka uç sunucusu 204 No Content durum kodu ve Content-Length: 48 ile yanıt verdi

      Örnek 3

      3. Örnek: Yanıt Gövdesi ile Arka Uç Sunucu Yanıtı 205

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      Bu örnekte arka uç sunucusu, This is a sample Response. yanıt gövdesiyle 205 Reset Content durum koduyla yanıt verdi

    4. Yukarıdaki örneklerin tümünde, arka uç sunucusu yanıt gövdesi ve/veya Olası nedenler bölümünde bahsedilen başlıklardan biriyle birlikte 204 No Content veya 205 Reset Content durum kodu göndermiştir.
    5. Bu nedenle Apigee Edge, protocol.http.ResponseWithBody hata koduyla birlikte 502 Bad Gateway durum kodu gönderdi.

Çözünürlük

Apigee Edge'e 204 No Content veya 205 Reset Content yanıtını gönderirken arka uç sunucusunun her zaman RFC 7231, bölüm 6.3.6: 205 İçeriği Sıfırlama spesifikasyonuna uyduğundan emin olun. Diğer bir deyişle, arka uç sunucusu aşağıdaki bilgileri 204 No Content veya 205 Reset Content yanıtının parçası olarak GÖNDERMEMELİDİR:

  1. Yanıt yükü gövdesi
  2. Ayrıca aşağıdaki başlıklardan herhangi biri:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

Spesifikasyon

Arka uç sunucusu 204 No Content veya 205 Reset Content yanıtı gönderirse ancak aşağıdaki RFC özelliklerine uymuyorsa Apigee Edge 502 Bad Gateway durum kodu ve protocol.http.ResponseWithBody hata koduyla yanıt verir:

Spesifikasyon
RFC 7231, bölüm 6.3.5: 204 İçerik Yok
RFC 7231, bölüm 6.3.6: 205 İçerik Sıfırlama

Dikkat edilmesi gereken önemli noktalar

Önerilen çözüm, arka uç sunucusunun 204 No Content ve 205 Reset Content durum kodunu yanıt gövdesi ve başlıklardan herhangi biri (Content-Length, Content-Encoding, Transfer-Encoding) olmadan gönderecek ve RFC 7231, bölüm 6.3.5: 204 No Content ve RFC 7231, bölüm 6.3.6: 205 İçeriği Sıfırla özelliklerine uymasıdır.

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 curl komutunu tamamlayın
  • 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ı
  • Ortam adı
  • API Proxy paketi
  • API istekleri için izleme dosyası
  • 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