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:
- Durum satırı (Apigee'de Yanıt satırı olarak adlandırılır)
- ( HTTP üstbilgileri kümesi)
- [ 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
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 charactersiçerdiğinden~15 bytesboyutundadı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.- Benzer şekilde, yukarıda gösterilen hata mesajındaki
faultstringsimgesinde"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:
- Hedef/arka uç sunucusu bir HTTP sistemi değildir. HTTP dışı bir yanıt veriyor olabilir.
- 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:
- Apigee Edge kullanıcı arayüzünde oturum açın. Uygun bir role sahip bir kullanıcı olarak oturum açın.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
- Hataları gözlemlediğiniz belirli zaman aralığını seçin.
- Hata kodunu daraltmak için Proxy filtresini seçebilirsiniz.
- Hata Kodunu Zaman ile karşılaştırın.
Aşağıda gösterildiği gibi, hata kodu
protocol.http.TooBigLineolan bir hücre seçin:
Aşağıda gösterildiği gibi, hata koduyla ilgili bilgileri görürsünüz:
protocol.http.TooBigLine
Günlükleri görüntüle'yi tıklayın ve başarısız olan isteğin satırını genişletin.
- Günlükler penceresinde aşağıdaki ayrıntıları not edin:
- Durum Kodu:
502 - Hata Kaynağı:
target - Hata Kodu:
protocol.http.TooBigLine.
- Durum Kodu:
- Hata Kaynağı değeri
targetve Hata Kodu değeriprotocol.http.TooBigLineise 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ı
- İzleme oturumunu ve aşağıdakilerden birini etkinleştirin:
502 Bad Gatewayhatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısı yapın ve
502 Bad Gatewayhatasını yeniden oluşturun.
- Başarısız olan isteklerden birini seçip izlemeyi inceleyin.
- İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
Hatayı genellikle aşağıdaki örnekte gösterildiği gibi
flowinfoError (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.
- hata:
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:
- İ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"}}}
- Hata:
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.
Aşağıdakilerin değerini not edin:
İstek başlıkları Değer X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetHata İç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:
- Özel bulut kullanıcısıysanız HTTP
502hatalarıyla ilgili temel bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logNerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir süre boyunca
502hataları olup olmadığını (sorun geçmişte yaşandıysa) veya502ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. X-Apigee-fault-code değerinin
protocol.http.TooBigLinedeğeriyle eşleştiği502hataları 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.TooBigLineX-Apigee-fault-source target
Neden: Yanıt satırı boyutu, izin verilen sınırın üzerinde
Teşhis
- 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.
- Hata Kaynağı değeri
targetise 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. 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
faultstringbö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:
- Yanıt satırının boyutunu doğrulama
- 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>...111111112 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.
- 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.
Mesaj İşleyici günlüğünde ileti kimliğini arayın:
/opt/apigee/var/log/edge-message-processor/logs/system.logsystem.logile 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,048metni, 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 koduprotocol.http.TooBiglineile birlikte502durum 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
- 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.
- 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.
- İ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.
- 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.
- Ö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.
- Mesaj İşleyici makinesinde,
HTTPResponse.line.limitözelliğini/opt/apigee/edge-message-processor/confdizininde 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
- Yukarıdaki komutun örnek sonucu aşağıdaki gibidir:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
Yukarıdaki örnek çıktıda,
HTTPResponse.line.limitözelliğininhttp.propertiesiçinde2kdeğ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ı
502hatası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ı
502hatasını yeniden oluşturmak için kullanılancurlkomutunun tamamıNGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logNerede: 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