Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 504 HTTP durum kodu ve Gateway Timeout mesajını alır.
Bu hata yanıtı, istemcinin bir API çağrısının yürütülmesi sırasında Apigee Edge'den veya arka uç sunucusundan zamanında yanıt almadığını gösterir.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 504 Gateway Time-out
Bu tür bir proxy'yi cURL veya web tarayıcısı kullanarak çağırdığınızda aşağıdaki hatayı alabilirsiniz:
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
Zaman aşımına ne neden olur?
Edge platformu üzerinden yapılan bir API isteğinin tipik yolu, aşağıdaki şekilde gösterildiği gibi İstemci > Yönlendirici > Mesaj İşleyici > Arka Uç Sunucusu'dur:
İstemciler, yönlendiriciler, mesaj işlemciler ve arka uç sunucular dahil olmak üzere Apigee Edge çalışma zamanı akışındaki tüm bileşenler, API isteklerinin tamamlanmasının çok uzun sürmemesi için uygun varsayılan zaman aşımı değerleriyle ayarlanır. Akıştaki bileşenlerden herhangi biri, zaman aşımı yapılandırmasında belirtilen süre içinde yukarı akış bileşeninden yanıt almazsa söz konusu bileşenin zaman aşımı gerçekleşir ve genellikle 504 Gateway Timeouthata döndürülür.
Bu başucu kitabında, yönlendiricinin zaman aşımına uğraması nedeniyle oluşan 504 hatasının nasıl giderileceği ve çözüleceği açıklanmaktadır.
Yönlendiricide zaman aşımı
Apigee Edge'deki yönlendiricilerde yapılandırılan varsayılan zaman aşımı 57 saniyedir. Bu, bir API isteği Edge'de alındıktan sonra yanıt geri gönderilene kadar (arka uç yanıtı ve yürütülen tüm politikalar dahil) bir API proxy'sinin yürütülebileceği maksimum süredir. Varsayılan zaman aşımı, Yönlendiricilerde G/Ç zaman aşımını yapılandırma bölümünde açıklandığı gibi yönlendiricilerde/sanal ana makinelerde geçersiz kılınabilir.
Olası nedenler
Edge'de, yönlendiricinin zaman aşımına uğraması nedeniyle oluşan 504 Gateway Timeout hatasının tipik nedenleri şunlardır:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Yönlendiricideki yanlış zaman aşımı yapılandırması | Bu durum, yönlendirici yanlış G/Ç zaman aşımı süresiyle yapılandırıldığında ortaya çıkar. | 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 izleme
- NGINX erişim günlükleri
API izleme
API İzleme'yi kullanarak hatayı teşhis etmek için:
- Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
5xxhatalarını filtreleyin ve zaman aralığını seçin.- Durum Kodu'nu Zaman'a göre çizin.
-
Daha fazla ayrıntı görmek ve bu hatalarla ilgili günlükleri aşağıdaki gibi görüntülemek için
504hatalarını gösteren hücreyi tıklayın:504 hatalarını gösteren örnek

- Sağdaki bölmede Günlükleri görüntüle'yi tıklayın.

Trafik Günlükleri penceresinde, bazı
504hatalarıyla ilgili aşağıdaki ayrıntıları not edin:- İstek: Bu, aramaları yapmak için kullanılan istek yöntemini ve URI'yi sağlar.
- Yanıt Süresi: Bu, istek için geçen toplam süreyi gösterir.
Yukarıdaki örnekte,
- İstek ,
GET /test-timeoutdeğerini gösteriyor. - Yanıt Süresi
57.001saniyedir. Bu, değer yönlendiricide ayarlanan varsayılan G/Ç zaman aşımı süresine ( 57 saniye) çok yakın olduğundan, Yönlendiricinin Mesaj İşleyici yanıt vermeden önce zaman aşımına uğradığını gösterir.
API İzleme GET logs API'sini kullanarak da tüm günlükleri alabilirsiniz. Örneğin,
org,env,timeRangevestatusgünlüklerini sorgulayarak istemcinin zaman aşımına uğradığı işlemlere ait tüm günlükleri indirebilirsiniz.API İzleme, bu
504hatalar için proxy'yi-(not set) olarak ayarladığından, sanal ana makine ve yolla ilişkili proxy'yi almak için API'yi (Logging API) kullanabilirsiniz.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Ek
504hatalar için Yanıt Süresi'ni inceleyin ve504hataların tümünde Yanıt Süresi'nin tutarlı olup olmadığını kontrol edin (Yönlendiricide ayarlanan G/Ç zaman aşımı değeri 57 saniyedir).
NGINX erişim günlükleri
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log 504Belirli bir süre boyunca hatalar (sorun geçmişte yaşandıysa) olup olmadığını veya504ile hâlâ başarısız olan istekler olup olmadığını kontrol etmek için arama yapın.- Bazı
504hatalarıyla ilgili aşağıdaki bilgileri göz önünde bulundurun:- Yanıt Süresi
- İstek URI'si

Bu örnekte aşağıdaki bilgiler gösterilmektedir:
-
İstek Süresi:
57.001saniye. Bu, yönlendiricinin 57,001 saniye sonra zaman aşımına uğradığını gösterir. - İstek:
GET /test-timeout - Ana Makine Takma Adı:
myorg-test.apigee.net
-
İstek Zamanı'nın, yönlendiricide/sanal ana makinede yapılandırılan G/Ç zaman aşımıyla aynı olup olmadığını kontrol edin. Evetse yönlendiricinin, mesaj işlemci bu süre içinde yanıt vermeden önce zaman aşımına uğradığı anlamına gelir.
Yukarıda gösterilen örnek NGINX Erişim Günlüğü girişinde,
57.001saniyelik İstek Zamanı, yönlendiricide ayarlanan varsayılan G/Ç zaman aşımına çok yakındır. Bu, Mesaj İşleyici yanıt vermeden önce yönlendiricinin zaman aşımına uğradığını net bir şekilde gösterir. - İstek alanındaki temel yolu kullanarak isteğin yapıldığı API proxy'sini belirleyin.
Neden: Yönlendiricideki yanlış zaman aşımı yapılandırması
Teşhis
504hatalarının, Mesaj İşleyici yanıt vermeden önce yönlendiricinin zaman aşımına uğramasından kaynaklanıp kaynaklanmadığını belirleyin. Bunu,API izleme/yönlendiricideki Yanıt Süresi'nin (her iki alan da aynı bilgiyi temsil eder ancak farklı adlarla adlandırılır) yönlendiricide/sanal ana makinede yapılandırılan G/Ç zaman aşımıyla aynı olup olmadığını kontrol ederek ve Hata Kaynağı, Hata Proxy'si ve Hata Kodu alanlarının Ortak teşhis adımları bölümünde açıklandığı gibi API izleme veya NGINX erişim günlükleri kullanılarak-olarak ayarlanıp ayarlanmadığını kontrol ederek yapabilirsiniz.-
Yönlendiricide veya belirli bir sanal ana makinede yapılandırılan G/Ç zaman aşımı değerinin, Mesaj İşleyici'de veya belirli bir API proxy'sinde yapılandırılan değere kıyasla daha düşük olup olmadığını kontrol edin.
Bu işlemi, bu bölümdeki adımları uygulayarak yapabilirsiniz.
Sanal ana makinelerde G/Ç zaman aşımını doğrulama
Edge kullanıcı arayüzü
Edge kullanıcı arayüzünü kullanarak sanal ana makine zaman aşımını doğrulamak için aşağıdakileri yapın:
- Edge kullanıcı arayüzüne giriş yapın.
- Yönetici > Sanal Ana Makineler'e gidin.
- Zaman aşımı sorununu yaşadığınız belirli bir ortamı seçin.
- G/Ç zaman aşımı değerini doğrulamak istediğiniz sanal ana makineyi seçin.
- Özellikler bölümünde, Proxy Read Timeout değerini saniye cinsinden görüntüleyin.

Yukarıdaki örnekte, Proxy Read Timeout ,
120değeriyle yapılandırılmıştır. Bu, bu sanal ana makinede yapılandırılan G/Ç zaman aşımının 120 saniye olduğu anlamına gelir.
Yönetim API'leri
Ayrıca, aşağıdaki yönetim API'lerini kullanarak Proxy Read Timeout'u doğrulayabilirsiniz:
-
Aşağıda gösterildiği gibi
virtualhostyapılandırmasını almak için Get virtual host API'sini yürütün:Public Cloud kullanıcısı
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Private Cloud kullanıcısı
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Burada:
ORGANIZATION_NAME, kuruluşun adıdır.
ENVIRONMENT_NAME, ortamın adıdır.
VIRTUALHOST_NAME, sanal ana makinenin adıdır.
-
proxy_read_timeoutözelliği için yapılandırılan değeri kontrol edin.Örnek Sanal Ana Makine Tanımı
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }Yukarıdaki örnekte,
proxy_read_timeout,120değeriyle yapılandırılmıştır. Bu, bu sanal ana makinede yapılandırılan G/Ç zaman aşımının 120 saniye olduğu anlamına gelir.
router.properties dosyasında G/Ç zaman aşımının doğrulanması
- Bir yönlendirici makinesine giriş yapın.
proxy_read_timeoutdizininde mülkü arayın/opt/nginx/conf.dve yeni değerle ayarlanıp ayarlanmadığını aşağıdaki şekilde kontrol edin:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Belirli sanal ana makine yapılandırma dosyasında
proxy_read_timeoutözelliği için ayarlanan değeri kontrol edin.grep komutundan örnek sonuç
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
Yukarıdaki örnek çıktıda,
proxy_read_timeoutözelliğinin içinde yeni57değeriyle ayarlandığını unutmayın.0-default.conf, varsayılan sanal ana makinenin yapılandırma dosyasıdır. Bu, varsayılan sanal ana makine için yönlendiricide G/Ç zaman aşımının 57 saniye olarak yapılandırıldığını gösterir. Birden fazla sanal ana makineniz varsa bu bilgileri her biri için görürsünüz.504hatalarıyla başarısız olan API çağrılarını yapmak için kullandığınız belirli sanal ana makine içinproxy_read_timeoutdeğerini alın.
API proxy'sinde G/Ç zaman aşımını doğrulama
G/Ç zaman aşımını aşağıdakilerde görüntüleyebilirsiniz:
- API proxy'sinin hedef uç noktası
- API proxy'sinin ServiceCallout politikası
API proxy'sinin hedef uç noktasında G/Ç zaman aşımını görüntüleme
- Edge kullanıcı arayüzünde, G/Ç zaman aşımı değerini görüntülemek istediğiniz API proxy'sini seçin.
- Kontrol etmek istediğiniz hedef uç noktayı seçin.
TargetEndpointyapılandırmasındaki<HTTPTargetConnection>öğesi altında uygun bir değere sahipio.timeout.millisözelliğini inceleyin.Örneğin, aşağıdaki kodda G/Ç zaman aşımı 120 saniye olarak ayarlanmıştır:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
API proxy'sinin ServiceCallout politikasında G/Ç zaman aşımını görüntüleme
- Edge kullanıcı arayüzünde, ServiceCallout politikası için yeni G/Ç zaman aşımı değerini görüntülemek istediğiniz API proxy'sini seçin.
- Kontrol etmek istediğiniz belirli ServiceCallout politikasını seçin.
-
<ServiceCallout>yapılandırması altında uygun bir değere sahip<Timeout>öğesine bakın.Örneğin, aşağıdaki kodun G/Ç zaman aşımı 120 saniye olur:
<Timeout>120000</Timeout>
Mesaj işlemcilerinde G/Ç zaman aşımını doğrulama
- Mesaj İşleyici makinesine giriş yapın.
-
Aşağıdaki komutu kullanarak
/opt/apigee/edge-message-processor/confdizinindeHTTPTransport.io.timeout.millisözelliğini arayın:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
Örnek çıktı
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- Yukarıdaki örnek çıktıda,
HTTPTransport.io.timeout.millisözelliğininhttp.propertiesiçinde55000değeriyle ayarlandığını unutmayın. Bu, G/Ç zaman aşımının Mesaj İşleyici'de 55 saniye olarak başarıyla yapılandırıldığını gösterir.
Yönlendiricide ve Mesaj İşleyicide yapılandırılan zaman aşımını belirledikten sonra, yönlendiricinin/sanal ana makinenin, Mesaj İşleyicideki/API proxy'sindeki zaman aşımı değerine kıyasla daha düşük bir zaman aşımı değeriyle yapılandırılıp yapılandırılmadığını doğrulayın.
Aşağıdaki tabloda gösterildiği gibi, tüm katmanlarda ayarlanan değerleri not edin:
| Yönlendiricide zaman aşımı (saniye) | Sanal ana makinede zaman aşımı (saniye) | Mesaj işleyicide zaman aşımı (saniye) | API proxy'sinde zaman aşımı (saniye) |
|---|---|---|---|
| 57 | - | 55 | 120 |
Bu örnekte,
- Yönlendiricide varsayılan 57 saniye değeri yapılandırılır.
- Zaman aşımı değeri, belirli sanal ana makinede ayarlanmamış. Bu, yönlendiricinin kendisinde yapılandırılmış 57 saniyelik varsayılan değerin kullanılacağı anlamına gelir.
- Mesaj İşleyici'de varsayılan değer 55 saniye olarak yapılandırılır.
- Ancak belirli API proxy'sinde 120 saniyelik bir değer yapılandırılmıştır.
Daha yüksek zaman aşımı değerinin yalnızca API proxy'sinde yapılandırıldığını ancak yönlendiricinin 57 saniye ile yapılandırılmaya devam ettiğini unutmayın. Bu nedenle, yönlendirici 57 saniyede zaman aşımına uğrarken mesaj işlemcisi/arka uç isteğinizi işlemeye devam eder. Bu durum, yönlendiricinin istemci uygulamasına 504 Gateway Timeout hatasıyla yanıt vermesine neden olur.
Çözünürlük
Bu sorunu çözmek için yönlendiricide ve mesaj işlemcisinde uygun G/Ç zaman aşımını yapılandırmak üzere aşağıdaki adımları uygulayın.
- Apigee Edge üzerinden API isteği akışına dahil olan farklı bileşenlerde hangi zaman aşımı değerlerinin ayarlanması gerektiğini anlamak için G/Ç zaman aşımını yapılandırma ile ilgili en iyi uygulamalar başlıklı makaleyi inceleyin.
- Yukarıdaki örnekte, arka uç sunucunun daha uzun bir süreye ihtiyacı olduğu için daha yüksek bir zaman aşımı değeri ayarlanması gerektiğini belirlediyseniz ve Mesaj İşleyici'nin zaman aşımı değerini 120 saniyeye yükselttiyseniz Yönlendirici'de daha yüksek bir zaman aşımı değeri ayarlayın. Örneğin:
123 seconds. Yeni zaman aşımı değeri nedeniyle tüm API proxy'lerinin etkilenmesini önlemek için123 secondsdeğerini yalnızca belirli API proxy'sinde kullanılan belirli sanal ana makinede ayarlayın. - Sanal ana makinede zaman aşımını ayarlamak için Yönlendiricilerde G/Ç zaman aşımını yapılandırma başlıklı makaledeki talimatları uygulayın.