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.DuplicateHeader 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ğıda gösterilene benzer bir hata mesajı da görebilirsiniz:
{
"fault":{
"faultstring":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}Olası nedenler
Bu hata, Apigee Edge'de yinelenmesine izin verilmeyen belirli bir HTTP üstbilgisi, arka uç sunucusu tarafından Apigee Edge'e gönderilen HTTP yanıtının bir parçası olarak aynı veya farklı değerlerle birden fazla kez görünürse oluşur.
RFC 7230, bölüm 3.2.2: Alan Sırasıuyarınca, bir gönderen, söz konusu üst bilgi alanının alan değerinin tamamı virgülle ayrılmış bir liste olarak tanımlanmadığı sürece bir iletide aynı alan adına sahip birden fazla üst bilgi alanı oluşturmamalıdır [ör. #(values)] veya başlık alanı iyi bilinen bir istisnadır. Apigee Edge, yinelenmesine izin verilmeyen belirli bir başlığın hedef/arka uç sunucusu tarafından gönderilen HTTP yanıtında birden fazla kez gönderildiğini tespit ederse 502 Bad Gateway ve hata kodu protocol.http.DuplicateHeader ile yanıt verir.
Bu hatanın olası nedenleri şunlardır:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Yanıt başlığında yinelenen başlık | Arka uç sunucusundan gelen yanıtta yinelenen üstbilgiler var. | 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çmanız gerekir.
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.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Hata Kodunu Zaman ile karşılaştırın.
Aşağıda gösterildiği gibi, hata kodunu
protocol.http.DuplicateHeaderiçeren bir hücre seçin:
protocol.http.DuplicateHeaderhata koduyla ilgili bilgiler aşağıda gösterildiği gibi görüntülenir:
- Durum Kodunun yukarıdaki örnekte gösterildiği gibi
502olduğundan emin olun. - 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.DuplicateHeader.
- Durum Kodu:
- Hata Kaynağı
target'dir. Bu, arka uç sunucusundan gelen yanıtta yinelenen üstbilgiler olduğunu gösterir.
İzleme aracı
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştirin ve şunlardan birini yapın:
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.
Tüm Akış Bilgilerini Göster'in etkinleştirildiğinden emin olun:

- 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 Request sent to target server (İstek hedef sunucuya gönderildi) aşamasından sonraki bir akışta bulabilirsiniz:

İzden hatanın değerini not edin.
Yukarıdaki örnek izlemede hata
Duplicate Header "Expires"olarak gösterilmektedir. Hata, istek arka uç sunucusuna gönderildikten sonra Apigee tarafından oluşturulduğundan arka uç sunucusununExpiresüstbilgisini birden fazla kez gönderdiği anlaşılır.- İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve bu aşamayı tıklayın.
Aşağı kaydırarak Phase Details - Response Headers (Aşama Ayrıntıları - Yanıt Başlıkları) bölümüne gidin ve aşağıdaki gibi X-Apigee-fault-code ve X-Apigee-fault-source değerlerini belirleyin:

- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini
protocol.http.DuplicateHeadervetargetolarak görürsünüz. Bu değerler, hatanın, arka uç sunucusu tarafındanExpiresyanıt başlığı için yinelenen üstbilgiler iletilmesinden kaynaklandığını gösterir.Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target Proxy zincirleme kullanıp kullanmadığınızı kontrol edin. Hedef sunucu veya hedef uç nokta, Apigee'de başka bir proxy'yi çağırıyor olabilir.
Bunu belirlemek için İsteğin hedefe gönderildiği sunucu aşamasına geri dönün. Show Curl'ü (Curl'ü Göster) tıklayın.
Hedef Sunucuya Gönderilen İstek İçin Curl penceresi açılır. Bu pencereden hedef sunucu ana makine diğer adını belirleyebilirsiniz.
- Hedef sunucu ana makine takma adı, sanal ana makine takma adına işaret ediyorsa bu, proxy zincirlemedir. Bu durumda,
502 Bad Gatewayhatasına neyin neden olduğunu belirleyene kadar zincirleme proxy için yukarıdaki tüm adımları tekrarlamanız gerekir. - Hedef sunucu ana makine takma adı arka uç sunucunuza işaret ediyorsa arka uç sunucunuzun, Apigee'ye yanıt olarak yinelenen başlıklar gönderdiği anlamına gelir.
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.DuplicateHeaderdeğ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:
Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target
Neden: Yanıtta yinelenen başlık var.
Teşhis
- API izleme veya NGINX erişim günlükleri kullanılarak gözlemlenen hatanın Hata Kodunu ve Hata Kaynağını belirleyin. Bu işlem, Yaygın teşhis adımları bölümünde açıklanmıştır.
- Hata Kaynağı
targetdeğerine sahipse bu, hedef sunucu tarafından gönderilen yanıtta yinelenen üst bilgiler olduğunu gösterir. Aşağıdaki yöntemlerden birini kullanarak yanıtın bir parçası olarak birden fazla kez gönderilen gerçek başlığı belirleyebilirsiniz:
Hata mesajı
Hata mesajını kullanma:
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa
faultstringbölümüne bakın.faultstring, birden fazla kez gönderilen üstbilgi adını içeriyor.Örnek hata mesajı:
"faultstring":"Duplicate Header \"Expires\""
- Yukarıdaki hata mesajında,
Expiresüstbilgisininfaultstringiçinde görüldüğü gibi birden fazla kez gönderildiği görülmektedir.
Gerçek istek
Gerçek isteği kullanma:
- Hedef sunucuya yapılan gerçek isteğe erişiminiz yoksa
curlkomutunu İzleme aracını kullanma bölümündeki 10.a ve 10.b adımlarından alın. Hedef sunucu uygulamasına yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
Hedef sunucuya çağrı yapın.
Bu örnekte kullanılan hedef sunucu için örnek istek:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
Yanıt içinde görünen başlıkların listesini doğrulayın.
Bu örnekte kullanılan hedef sunucudan alınan örnek yanıt:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
Yukarıdaki örnek istekte
Expiresbaşlığı birden fazla kez gönderiliyor. Bu nedenle, bu istek502 Bad Gatewayhatası veprotocol.http.DuplicateHeaderhata koduyla başarısız olur.Adı
faultstringiçinde görünen üstbilgi, arka uç sunucusunun yanıtında birden fazla kez görünüyorsa bu hatanın nedeni budur. Yukarıdaki örnekteExpiresbaşlığı birden fazla kez gönderiliyor.
Çözünürlük
Kopyalama sorununu düzeltme
1. seçenek [önerilen seçenek]: Arka uç sunucusunu, yinelenen başlıkları içermeyecek şekilde düzeltin
- Belirli bir arka uç sunucusunun üstbilgiyi neden iki kez gönderdiğini analiz edin
Expiresve API proxy'lerinin bunu kabul etmesinin uygun olup olmadığını doğrulayın. Çoğu durumda, HTTP spesifikasyonu RFC7230 uyarınca bu durum istenmez. - Bu durum istenmiyorsa hedef sunucu uygulamanızı, yinelenen başlıklar göndermeyecek şekilde değiştirin.
Yukarıda bahsedilen örnekte,
Expiresbaşlığının aynı değerle iki kez gönderildiği görülmektedir. Bu durum istenmeyen bir durumdur. Hedef sunucununExpiresüstbilgisini yalnızca bir kez ilettiğinden emin olarak sorunu düzeltebilirsiniz. - İsteniyorsa ve yinelenen üstbilgilere izin vermek istiyorsanız 2. seçenek: CwC mülkünü kullanma bölümüne gidin.
CwC
2. seçenek: CwC mülkünü kullanma
Apigee ,istemci uygulamalarının ve hedef sunucuların Apigee Edge'deki API proxy'lerine yinelenen başlıklar göndermesine olanak tanıyan bir CwC özelliği HTTPHeader.<HeaderName> sunar.
| CwC mülkü | Değerler |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Örneğin, aşağıdaki özellik, ileti işlemcilerinde ayarlanarak Expires başlığı için yinelenenlere ve birden fazla değere izin verilebilir.
HTTPHeader.Expires=allowDuplicates, multiValued
- Özel bulut kullanıcısıysanız, istekte yinelenen üstbilgiler olsa bile Apigee Edge'in
502 Bad Gatewayhatası vermesini önlemek için mülkü yapılandırabilirsiniz. Bu işlem için Mesaj işlemcilerini yinelenen üstbilgileri kullanacak şekilde yapılandırma başlıklı nasıl yapılır kılavuzundan yararlanabilirsiniz. - Herkese açık bulut kullanıcısıysanız bu özelliği kuruluşunuz için yapılandırmak üzere Apigee Edge Destek Ekibi ile iletişime geçin.
Spesifikasyon
Apigee, arka uç sunucusunun aşağıdaki RFC spesifikasyonlarına göre davranmasını beklediği için 502 Bad Gateway hata yanıtını verir:
| Spesifikasyon |
|---|
| RFC 7230, bölüm 3.2.2: Alan Sırası |
| RFC 7230, bölüm 3.2: Başlık Alanları |
Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplama 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ı
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ı
- 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_logNerede: ORG, ENV ve PORT# değerlerinin yerine gerçek değerler girilir.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log