Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Belirti
İstemci uygulaması 502 Bad Gateway
HTTP durum kodunu hata koduyla alıyor
protocol.http.DuplicateHeader
API çağrılarına yanıt olarak kullanılı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'de kopyası olmasına izin verilmeyen belirli bir HTTP üstbilgisinde ortaya çıkar. Edge, tarafından gönderilen HTTP yanıtının bir parçası olarak aynı veya farklı değerlerle birden fazla kez görünür tekrar Apigee Edge'e bağlayabilirsiniz.
uyarınca
RFC 7230, bölüm 3.2.2: Alan Sırası, bir gönderen birden çok üstbilgi OLUŞTURMAMALIDIR
bir iletide aynı alan adına sahip alanları oluşturmadığı sürece,
üstbilgi alanı virgülle ayrılmış bir liste olarak tanımlanır, [ör. #(values)] ya da başlık alanı bir
iyi bilinen bir istisnadır. Apigee Edge aynı başlıkta bir şey bulursa şuna izin verilmez:
tarafından gönderilen HTTP yanıtında birden fazla kez gönderilmişse
hedef/arka uç sunucusu
ardından 502 Bad Gateway
ve hata koduyla yanıt verir
protocol.http.DuplicateHeader
Bu hatanın olası nedenleri aşağıda açıklanmıştır:
Neden | Açıklama | Şunun için geçerli sorun giderme talimatları: |
---|---|---|
Yanıtta yinelenen başlık | Arka uç sunucusundan alınan yanıt yinelenen başlıklar içeriyor. | Edge Herkese Açık ve Private Cloud kullanıcıları |
Sık kullanılan 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:
- Apigee Edge kullanıcı arayüzünde uygun role sahip olur.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analiz > API İzleme > İnceleme sayfası.
- Hataları gözlemlediğiniz zaman aralığını seçin.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Zaman ile Hata Kodu'nun grafiğini çizin.
Aşağıda gösterildiği gibi
protocol.http.DuplicateHeader
hata koduna sahip bir hücre seçin:protocol.http.DuplicateHeader
hata koduyla ilgili bilgiler aşağıda gösterildiği gibidir:- Durum Kodu'nun yukarıdaki örnekte gösterildiği gibi
502
olduğundan emin olun. - Günlükleri görüntüle'yi tıklayın ve başarısız isteğin bulunduğu satırı genişletin.
Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
- Durum Kodu:
502
- Hata Kaynağı:
target
- Hata Kodu:
protocol.http.DuplicateHeader
.
- Durum Kodu:
- Hata Kaynağı
target
'dır. Bu, arka uç sunucusundan gelen yanıtın yinelenen üstbilgiler içerdiğini gösterir.
İzleme aracı
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştirin ve
502 Bad Gateway
hatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısını yapın ve
502 Bad Gateway
hata
Tüm Akış Bilgilerini Göster seçeneğinin etkin olduğundan emin olun:
- Başarısız isteklerden birini seçin ve izini inceleyin.
- İzlemenin farklı aşamaları arasında gezinin ve hatanın nerede oluştuğunu bulun.
Hatayı genellikle İstek gönderilen hedeften sonraki bir akışta bulabilirsiniz. sunucu aşamasını görebilirsiniz:
İzdeki hatanın değerini not edin.
Yukarıdaki örnek iz, hatayı
Duplicate Header "Expires"
olarak gösteriyor. Başlangıç hata, istek arka uç sunucusuna gönderildikten sonra Apigee tarafından ortaya çıkıyorsa arka uç sunucusununExpires
üstbilgisini birden fazla kez gönderdiğini varsayalım.- İzlemedeki AX (Analytics Verilerinin Kaydedilen) Aşamasına gidin ve tıklayın.
Aşama Ayrıntıları - Yanıt Başlıkları bölümüne gidin ve X-Apigee-fault-code ve X-Apigee-fault-source değerlerini aşağıda görebilirsiniz:
- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini görürsünüz.
protocol.http.DuplicateHeader
vetarget
olarak görünür. Bu da bu hata, aynı web sitesi için arka uç sunucusu tarafından yinelenen başlıkların iletilmesinden yanıt başlığıExpires
.Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
Şunu kullanıp kullanmadığınızı kontrol edin: proxy zincirleme; diğer bir deyişle, hedef sunucu veya hedef uç nokta Apigee'de başka bir proxy'yi çağırıyordur.
Bunu belirlemek için İstek hedefe gönderildi sunucu aşamasına geri dönün. Curl'ü Göster'i tıklayın.
Hedef Sunucuya Gönderilen İsteğin Kısmı penceresi açılır. Buradan aşağıdaki işlemleri yapabilirsiniz: hedef sunucu ana makine takma adını belirler.
- Hedef sunucu ana makine takma adı, bir sanal ana makine takma adına işaret ediyorsa bu bir proxy
zincirlemedir. Bu durumda, zincirli proxy için yukarıdaki adımların tümünü tekrarlamanız gerekene kadar
502 Bad Gateway
hatasına gerçekte neyin neden olduğunu belirlersiniz. - Hedef sunucu ana makine takma adı, arka uç sunucunuzu işaret ediyorsa arka uç sunucunuz Apigee'ye yanıt olarak yinelenen başlıkları gönderiyor demektir.
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Private Cloud kullanıcısıysanız NGINX erişim günlüklerini kullanarak şunları yapabilirsiniz:
HTTP
502
hatalarıyla ilgili önemli bilgileri belirler. 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# şununla değiştirilir: gerçek değerler.
- Belirli bir sürede
502
hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya hâlâ başarısız olan bir istek varsa502
X-Apigee-fault-code'da
502
hatası bulursanızprotocol.http.DuplicateHeader
değeriyle eşleşir, sonra X-Apigee-fault-source.'un değerini belirleyin.NGINX erişim günlüğünden örnek 502 hatası:
NGINX Erişim günlüğünden alınan yukarıdaki örnek giriş, X- Apigee-fault-code ve X-Apigee-fault-source:
Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
Neden: Yanıtta yinelenen Üstbilgi
Teşhis
- API kullanılarak gözlemlenen hatanın Hata Kodu ve Hata Kaynağı'nı belirleme Yaygın teşhis adımlarında açıklandığı şekilde izleme veya NGINX erişim günlükleri.
- Hata Kaynağı
target
değerine sahipse bu durum, yanıtın hedef sunucu tarafından gönderilen yinelenen başlıklar içeriyor. Yanıtın parçası olarak birden çok kez gönderilen üstbilgiyi belirleyebilirsiniz. aşağıdaki yöntemlerden birini kullanın:
Hata mesajı
Hata mesajını kullanarak:
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa Şuraya:
faultstring
.faultstring
, SSCS'nin birden fazla kez gönderildi.Örnek hata mesajı:
"faultstring":"Duplicate Header \"Expires\""
- Yukarıdaki hata iletisinde,
Expires
üstbilgisinin gönderildiğini görüyorsunuz daha fazlafaultstring
görebilirsiniz.
Gerçek istek
Gerçek isteği kullanarak:
- Hedef sunucuya gönderilen gerçek isteğe erişiminiz yoksa
şuradan ilgili
curl
komutunu İzleme aracını kullanma: 10.a ve Adım 10.b. Hedef sunucu uygulamasına yapılan gerçek isteğe erişiminiz varsa ardından aşağıdaki adımları uygulayın:
Hedef sunucuya bir çağrı yapın.
Bu örnekte kullanılan hedef sunucu için örnek İstek:
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ıtta 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
Expires
başlığı, birçok kez kontrol edilir. Bu nedenle, bu istek502 Bad Gateway
ile başarısız oluyor hatası ve hata kodu:protocol.http.DuplicateHeader
.Adı
faultstring
içinde görünen üstbilgi birden fazla kez yanıtlayamazsa bu durumun nedeni budur hatası. Yukarıdaki durumdaExpires
başlığı birden fazla kez gönderilir.
Çözünürlük
Kopyayı düzeltin
1. Seçenek [Önerilen Seçenek] Arka uç sunucusunu yinelenen başlıklar içermeyecek şekilde düzeltin
- İlgili arka uç sunucusunun yinelenen başlık göndermesinin nedenini analiz etme
Expires
'yı tıklayın ve API proxy'lerinin bunu kabul etmesinin uygun olup olmadığını doğrulayın. İçinde çoğu durumda, HTTP spesifikasyonu uyarınca bu RFC7230. - İstenmiyorsa hedef sunucu uygulamanızı yinelenen başlıklar göndermeyecek şekilde değiştirin.
Yukarıda açıklanan örnekte
Expires
başlığının gönderildiği fark edilmiştir. 2 katına çıkar. Bu da istenen bir durumdur. Sorunu çözmek için hedef sunucununExpires
üstbilgisini yalnızca bir kez ilettiğini belirtir. - İsterseniz ve yinelenen başlıklara izin vermek istiyorsanız 2. Seçenek: CwC özelliğini kullanma.
CwC
2. seçenek CwC özelliğini kullanma
Apigee, CwC mülkü sunar
HTTPHeader.<HeaderName>
sunucuların Apigee Edge'deki API proxy'lerine yinelenen üstbilgiler göndermesini sağlar.
CwC mülkü | Değerler |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Örneğin, yinelemelere izin vermek için Mesaj İşleyicilerde aşağıdaki özellik ayarlanabilir.
ve Expires
başlığı için birden fazla değer girilmelidir.
HTTPHeader.Expires=allowDuplicates, multiValued
- Private Cloud kullanıcısıysanız mülkü Apigee'nin
İstek şunu içerse bile
502 Bad Gateway
hatasının oluşmasını engeller yinelenen başlıkları kullanarak İleti işlemcilerini yinelenen üstbilgileri kullanacak şekilde yapılandırma "nasıl yapılır?" kılavuzu. - Herkese Açık Bulut kullanıcısıysanız bu ayarı yapılandırmak için Apigee Edge Destek Ekibi ile iletişime geçin sahip olmanız gerekir.
Spesifikasyon
Apigee, 502 Bad Gateway
hata yanıtıyla yanıt verirken
arka uç sunucusu aşağıdaki RFC spesifikasyonlarına göre davranır:
Spesifikasyon |
---|
RFC 7230, bölüm 3.2.2: Alan Sırası |
RFC 7230, bölüm 3.2: Üstbilgi Alanları |
Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız adresine gidin. Teşhis bilgileri toplanmalıdır.
Teşhis bilgileri toplanmalıdır
Aşağıdaki teşhis bilgilerini toplayın, ardından Apigee Edge Destek Ekibi ile iletişime geçin.
Herkese açık Cloud 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ılancurl
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 tam hata mesajı gözlemlendi
- 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# şununla değiştirilir: gerçek değerler.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log
.