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 protocol.http.TooBigHeaders hata koduyla birlikte 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 headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Olası nedenler
Bu hata, hedef/arka uç sunucu tarafından HTTP yanıtının bir parçası olarak Apigee Edge'e gönderilen üstbilgilerin toplam boyutu, Apigee Edge'de izin verilen sınırı aştığında oluşur.
Bu hatanın olası nedenleri şunlardır:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Yanıtın başlıklarının boyutu, izin verilen sınırdan büyük | Belirli bir başlığın başlık boyutu veya hedef/arka uç sunucu tarafından Apigee Edge'e HTTP yanıtının bir parçası olarak gönderilen tüm başlıkların başlık boyutlarının toplamı, 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.TooBigHeadersolan bir hücre seçin:
Aşağıda gösterildiği gibi, hata koduyla ilgili bilgileri görürsünüz:
protocol.http.TooBigHeaders
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.TooBigHeaders.
- Durum Kodu:
- Hata Kaynağı değeri
targetve Hata Kodu değeriprotocol.http.TooBigHeadersise bu, hedef/ arka uç sunucusundan gelen HTTP yanıtının, Apigee Edge'de izin verilen sınır değerinden büyük başlıklara 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.
Bu hatayı genellikle aşağıdaki resimde gösterildiği gibi İstek hedef sunucuya gönderildi aşamasından hemen sonra Hata adlı akışta görürsünüz:
İzlemedeki hata değerlerini not edin:
- hata:
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
Bu, Apigee Edge'in (Mesaj İşleyici bileşeni) arka uç sunucusundan yanıtı alır almaz, başlık boyutu izin verilen sınırı aştığı için hatayı verdiğini gösterir.
- hata:
Aşağıda gösterildiği gibi, Apigee Edge tarafından gönderilen İstemciye Gönderilen Yanıt hata yanıtında başarısızlık gösterilir:
- İzden hatanın değerlerini not edin. Yukarıdaki örnek izde şunlar gösterilmektedir:
- Hata:
502 Bad Gateway. - Hata İçeriği:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Hata:
İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve ilgili ayrıntıları görmek için bu aşamayı tıklayın.
Aşağıdakilerin değerini not edin:
Hata üstbilgileri Değer X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source targetHata İçeriği: Gövde {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Özel bulut kullanıcısıysanız HTTP
502 Bad Gatewayile 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
502hata koduylaprotocol.http.TooBigHeadershata 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.TooBigHeadersdeğeriyle eşleştiği502hataları bulursanız X-Apigee-fault-source değerini belirleyin.NGINX erişim günlüğünden örnek 502 hatası:
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:
Hata üstbilgileri Değer X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source target
Neden: Yanıttaki başlıkların boyutu, izin verilen sınırı aşıyor
Teşhis
- Genel teşhis adımları bölümünde açıklandığı gibi, API izleme, izleme aracı veya NGINX erişim günlükleri kullanılarak gözlemlenen hata için Hata Kodu, Hata Kaynağı ve Yanıt Yükü Boyutu'nu belirleyin.
- Hata Kaynağı
targetdeğerine sahipse bu, hedef/arka uç sunucusu tarafından Apigee'ye gönderilen yanıtta, boyutu Apigee Edge'deki izin verilen sınırdan daha büyük olan başlıklar olduğunu gösterir. - Aşağıdaki yöntemlerden birini kullanarak hedef/arka uçtan gelen yanıtta, boyutu izin verilen sınırdan büyük olan başlıklar olduğunu 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.faultstring, yanıt başlığı boyutunun izin verilen sınırı aştığını gösterir.Örnek hata mesajı:
"faultstring":"response headers size exceeding 25,600"
Yukarıdaki hata mesajında,
faultstringbölümünde yanıtın, toplam boyutu izin verilen sınırı aşan üstbilgilere sahip olduğunu unutmayın.Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
Hedef/arka uç sunucusuna yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- Herkese açık bulut/özel bulut kullanıcısıysanız arka uç sunucusundan veya arka uç sunucusuna istekte bulunmanıza izin verilen başka bir makineden doğrudan arka uç sunucusuna istekte bulunun.
- Özel bulut kullanıcısıysanız isteği bir mesaj işlemcisinden arka uç sunucusuna da gönderebilirsiniz.
- Arka uç sunucusundan alınan yanıtı inceleyin ve özellikle yanıtta iletilen başlıkların toplam boyutunu hesaplayıp doğrulayın.
Yanıt yükündeki başlıkların boyutunun Apigee Edge'de izin verilen sınırı aştığını tespit ederseniz sorunun nedeni budur.
Hedef sunucudan örnek yanıt:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactYukarıdaki örnekte,
Testheader1veTestheader2daha büyük boyutlara sahip. Bu durum, Apigee Edge'de izin verilen sınırı aştığı için bu hataya neden oluyor.
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 başlıkları boyutunun Apigee Edge'deki izin verilen sınırı aşıp aşmadığını doğrulamak için Mesaj İşleyici günlüklerini kullanabilirsiniz.
Mesaj İşleyici günlüklerini kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Belirli bir süre boyunca (sorun geçmişte yaşandıysa)
502hataları olup olmadığını veya502ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. Aşağıdaki arama dizesini kullanabilirsiniz:grep -ri "response headers size exceeding"
system.logile ilgili aşağıdaki gibi satırlar görürsünüz. Yanıt üstbilgilerinin boyutu sizin durumunuzda farklılık gösterebilir:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
Mesaj İşleyici, arka uç/hedef sunucudan yanıtı alır almaz ve başlıkların toplam boyutunun 25 KB'tan büyük olduğunu tespit ederse durur ve şu hatayı verir:
response headers size exceeding 25,600Bu, Toplam Başlık Boyutu'nun 25 KB'tan fazla olduğunu ve Apigee'nin, boyut 25 KB sınırını aşmaya başladığında hata kodunu
protocol.http.TooBigHeadersolarak döndürdüğünü gösterir.
Çözünürlük
Boyutu düzelt
1. seçenek [Önerilen]: Hedef sunucu uygulamasının, Apigee sınırını aşan başlık boyutu göndermesini engelleyin
- Sınırlar bölümünde tanımlandığı gibi, belirli hedef sunucunun yanıt başlığı boyutunu izin verilen sınırdan daha fazla göndermesinin nedenini analiz edin.
- Bu durum istenmiyorsa arka uç sunucu uygulamanızı, boyutu Apigee Edge'de izin verilen sınırın altında olan yanıt üstbilgilerini gönderecek şekilde değiştirin.
- Üstbilgi bilgilerinin yanıt gövdesiyle birlikte gönderilip gönderilemeyeceğini kontrol edin.
- Mümkünse üstbilgiye eklemeyi planladığınız büyük boyutlu bilgileri yanıt gövdesinde gönderin. Bu şekilde, yanıt başlığı sınırını aşmazsınız.
CwC
2. seçenek : Yanıt başlığı boyutu sınırını artırmak için CwC özelliğini kullanma
Apigee, yanıt üstbilgileri boyut sınırını artırmasına olanak tanıyan bir CwC özelliği sağlar. Ayrıntılar için: Mesaj İşleyici için sınırları yapılandırma
Sınırlar
Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları'nda İstek/Yanıt Başlığı Boyutu için belirtilen izin verilen sınırı aşan başlık boyutları göndermemesini bekler.
- Herkese açık bulut kullanıcısıysanız İstek ve Yanıt başlıkları boyutu için maksimum sınır, Apigee Edge Sınırları'ndaki İstek/Yanıt Başlığı boyutu için belirtilen sınırla aynıdır.
- Özel bulut kullanıcısıysanız İstek ve Yanıt başlıkları 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 başlığı boyutu sınırını belirleyebilirsiniz.
Mevcut sınır nasıl kontrol edilir?
Bu bölümde, tesisin HTTPResponse.headers.limit Mesaj İşleyiciler'de yeni bir değerle güncellendiğinin nasıl doğrulanacağı açıklanmaktadır.
- Mesaj İşleyici makinesinde,
HTTPResponse.headers.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.headers.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.headers.limit=25k
Yukarıdaki örnek çıktıda,
HTTPResponse.headers.limitözelliğininhttp.propertiesiçinde25kdeğeriyle ayarlandığını unutmayın.Bu, Apigee'de Private Cloud için yapılandırılan yanıt yükü boyutu sınırının 25 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ılancurlkomutunun tamamı- API istekleri için izleme dosyası
- Hedef/arka uç sunucudan gelen yanıtın üst bilgilerin boyutuyla birlikte tam çıktısı
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ı- Hedef/arka uç sunucusundan gelen yanıtın, üst bilgilerin boyutuyla birlikte tam çıktısı
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