Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak Not
Found
mesajını ve Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
hata mesajını içeren 404
HTTP durum kodunu alır.
Bu hata, Edge'in belirtilen sanal ana makine ve yol için API proxy'sini bulamadığı anlamına gelir.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 404 Not Found
Ayrıca aşağıdakine benzer bir hata mesajı da görebilirsiniz:
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
Olası nedenler
Neden | Açıklama | Şunun için geçerli sorun giderme talimatları: |
---|---|---|
Yinelenen ana makine takma adına sahip sanal ana makine | Birden fazla sanal ana makine aynı ana makine takma adına ve bağlantı noktası numarasına sahiptir. | Edge Herkese Açık ve Özel Bulut kullanıcıları |
Yaygın teşhis adımları
NGINX ve Mesaj İşleyici günlükleri, 404
hatasının giderilmesinde yardımcı olacaktır.
Günlükleri kontrol etmek için aşağıdaki adımları uygulayın:
- Aşağıdaki komutu kullanarak NGINX günlüklerini görüntüleyin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Günlük girişlerinde aşağıdaki alanları kontrol edin:
Alan Değer Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Günlüklerdeki ileti kimliğini not edin.
- Belirli bir API için
messaging.adaptors.http.flow.ApplicationNotFound
bilginizin olup olmadığını veya API isteği için 2. adımdaki benzersiz mesaj kimliğine sahip olup olmadığınızı öğrenmek amacıyla Message Processor günlüklerini kontrol edin (/opt/apigee/var/log/edge-message-processor/logs/system.log)
).İleti İşleyici günlüğünden örnek hata mesajı
NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms lastIO=0ms isOpen=true)
Yukarıdaki günlükte hata kodu gösterilmektedir. Hata mesajı ise aşağıdaki gibidir:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Neden: Aynı ana makine takma adına ve bağlantı noktası numarasına sahip birden fazla sanal ana makine
Apigee Edge Yönlendiricileri ve Mesaj İşleyicileri, trafiği doğru API proxy'sine yönlendirmek için hem ana makine üstbilgisini, bağlantı noktası numarasını hem de URI yollarını kullanır. Aynı ana makine takma adı ve bağlantı noktası numarasına sahip birden fazla sanal ana makine gibi belirsiz tanımların olması, belgelenmiş bir anti kalıbı olduğu için beklenmedik davranışlara yol açabilir. Sık karşılaşılan hatalardan biri de Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
mesajındaki 404
hatasıdır.
Genellikle aynı ana makine takma adına sahip birden fazla sanal ana makine varsa aralıklı 404
hataları görürsünüz. Bunun nedeni, ilgili API proxy'sinin sanal ana makinelerden yalnızca birindeki istekleri kabul edecek şekilde yapılandırılabilmesidir. API istekleri, API Proxy'sinde yapılandırılan belirli bir sanal ana makineye yönlendirildiğinde başarılı bir yanıt alırsınız.
Ancak API istekleri, API Proxy'sinin istekleri kabul edecek şekilde yapılandırılmadığı diğer sanal ana makinelere yönlendirildiğinde API'ler bu 404
hatalarıyla başarısız olur.
404 From proxy for sunucu: <sanal ana makine adı> ve url: <yol> bölümünde verilen talimatları uygulayıp bu hatayı giderin. Nedenlerin hiçbiri bu hataya yol açmıyorsa yinelenen ana makine takma adlarına sahip sanal ana makinelerin 404
hatalarına neden olup olmadığını belirlemek için aşağıdaki adımları uygulayın.
Teşhis
Aynı ana makine takma adına/bağlantı noktası numarasına sahip olan ve 404
hatalarına yol açan birden fazla sanal ana makine olup olmadığını belirlemek için aşağıdaki yöntemlerden birini kullanın:
- Edge kullanıcı arayüzü
- Yönetim API'leri
Edge kullanıcı arayüzü
Edge kullanıcı arayüzünü kullanarak aynı ana makine takma adına/bağlantı noktası numarasına sahip birden fazla sanal ana makinenin olup olmadığını belirlemek için bu talimatları kullanın.
Örneğin, http://example.com:9001/proxy1
URL'sinde 404
hatası gözlemlediyseniz hangi sanal ana makinelerin ana makine takma adı example.com
ve bağlantı noktası 9001
olduğunu bulmanız gerekir.
- Public Cloud'da ve Private Cloud'daki yeni Edge kullanıcı arayüzünde:
- Yönetici'yi seçin.
- Sanal Ana Makineler'i seçin.
- Her Ortam'da, API isteklerinin çağrıldığı belirli Ana Makine Takma Adı ile eşleşen Sanal Ana Makineleri belirlemek için arama filtresini kullanın.
- Aynı Ana Makine Takma Adını kullanan birden fazla Sanal Ana Makine bulursanız bu sorunu çözmek için Çözüm bölümüne gidin.
Örneğin:
- Private Cloud'daki klasik kullanıcı arayüzünde:
- API'ler sekmesini seçin.
- Ortam Yapılandırması'nı seçin.
- Sanal Ana Makineler'i seçin.
- Her Ortam için, API isteklerinin çağrıldığı belirli Ana Makine Takma Adı ile eşleşip eşleşmediğini görmek için Sanal Ana Makineler listesini görüntüleyin.
- Aynı Ana Makine Takma Adı ile eşleşen birden fazla Sanal Ana Makine bulursanız bu sorunu çözmek için Çözüm bölümüne bakın.
Örneğin:
Yönetim API'leri
Management API'lerini kullanarak, aynı ana makine takma adına/bağlantı noktası numarasına sahip birden fazla sanal ana makinenin olup olmadığını belirlemek için bu talimatları uygulayın.
Hangi sanal ana makinelerin aynı ana makine takma adına ve bağlantı noktası numarasına sahip olduğunu görmek için kuruluşunuzdaki tüm ortamlardaki sanal ana makinelerin tanımını öğrenin:
Örneğin,
http://example.com:9001/proxy1
URL'sinde404
hatası gözlemlediyseniz hangi sanal ana makinelerin ana makine takma adıexample.com
ve bağlantı noktası9001
olduğunu bulmanız gerekir.Ortam listesini alma
Herkese Açık Bulut kullanıcısı:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Private Cloud kullanıcısı:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Burada:
ORGANIZATION_NAME, kuruluşun adıdır
Örnek:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Bir ortamdaki sanal ana makinelerin listesini alma
Herkese Açık Bulut kullanıcısı:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Private Cloud kullanıcısı:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Burada:
ORGANIZATION_NAME, kuruluşun adıdır
ENVIRONMENT_NAME ortamın adıdır.
Örnek:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Ortamdaki tüm sanal ana makinelerin tanımını öğrenin.
Herkese Açık Bulut kullanıcısı:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Private Cloud kullanıcısı:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Burada:
ORGANIZATION_NAME, kuruluşun adıdır
ENVIRONMENT_NAME ortamın adıdır.
VIRTUAL_HOST_NAME, sanal ana makinenin adıdır
Örnek:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
Yukarıdaki iki adımı kuruluşunuzdaki diğer ortamlar için de tekrarlayın.
Bu örnekte,
dev
ortamı için bu adımları tekrarlayın:curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts -u USERNAME
[ "default" ]
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
Bu örnekte, iki farklı ortamdaki (
test
vedev
) iki sanal ana makinenindefault
aynı ana makine takma adınıexample.com
ve bağlantı noktası numarasını9001
içerdiğini görebilirsiniz.404
hatalarının nedeni budur.- Aynı Ana Makine Takma Adı ile eşleşen birden fazla Sanal Ana Makine bulursanız bu sorunu çözmek için Çözüm bölümüne bakın.
Çözünürlük
- Her sanal ana makinenin yalnızca benzersiz ana makine takma adı ve bağlantı noktası kombinasyonları içerdiğinden emin olun.
- Aynı ana makine takma adı ve bağlantı noktası kombinasyonlarına sahip birden fazla sanal ana makine belirlediyseniz bunları benzersiz bir ana makine takma adıyla güncellemeniz gerekir.
- Bunları Edge kullanıcı arayüzünü veya Management API'yi kullanarak güncelleyebilirsiniz. Talimatları Sanal ana makineyi değiştirme bölümünde bulabilirsiniz.
- Her ana makine takma adının doğru bir DNS girişine sahip olduğundan emin olun.
- Yukarıda açıklanan örnekte, yapılandırmamız aşağıdaki gibi görünüyorsa:
curl -X GET http://localhost:8080/v1/organizations/myorg/environments -u user
[ "prod", "test", "dev" ]
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- Yanlış sanal ana makineyi çakışmayacak şekilde güncelleyebilirsiniz.
- Ana makine takma adını
example2.com
olarak güncelleyin. - Yeni ana makine takma adının, önceki ana makine takma adıyla benzer bir DNS girişine sahip olduğundan emin olun.
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user -H 'Content-Type: application/json' -d '{ "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }' -i
HTTP/1.1 200 OK Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Type: application/json X-Apigee.user: user X-Apigee.organization: myorg X-Apigee.environment: dev X-Apigee.backends: management-server Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Length: 152 { "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- Proxy'ye tekrar API çağrıları yapın ve tutarlı şekilde başarılı yanıtlar aldığınızı doğrulayın:
curl http://example.com:9001/proxy1
{ "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type:": "all" }, { "items": [ "Why WonderWidgets are great", "Who buys WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
- Sorun devam ederse Teşhis bilgileri toplanmalı bölümüne gidin.
Teşhis bilgileri toplanmalıdır
Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki teşhis bilgilerini toplayıp 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 adı
404
hatasını yeniden oluşturmak içincurl
komutunu tamamlayın404
hataları şu anda ortaya çıkmıyorsa geçmişte404
hatalarının meydana geldiği zaman dilimi bilgilerini içeren dönem bilgisini sağlayın.
Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Başarısız istekler için gözlemlenen tam hata mesajı
404
hatalarını gözlemlediğiniz kuruluş, ortam adı ve API proxy adı- API Proxy paketi
- NGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- Mesaj İşleyici günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log
404
hatalarının oluştuğu saat dilimi bilgilerinin yer aldığı dönem