Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 404 HTTP durum koduyla birlikte Not
Found mesajını ve Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH hata mesajını 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ğıda gösterilene 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 | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Yinelenen ana makine takma adıyla sanal ana makine | Birden fazla sanal ana makine aynı ana makine takma adına ve bağlantı noktası numarasına sahip. | Edge Public ve Private Cloud kullanıcıları |
Sık karşılaşılan teşhis adımları
NGINX ve Mesaj İşleyici günlükleri, 404 hatasını gidermede yardımcı olur.
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, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundGünlüklerdeki ileti kimliğini not edin.
- Belirli API için
messaging.adaptors.http.flow.ApplicationNotFoundolup olmadığını veya API isteği için 2. adımda benzersiz ileti kimliğinin olup olmadığını görmek için Mesaj İşleyici günlüklerini (/opt/apigee/var/log/edge-message-processor/logs/system.log)) kontrol edin.Mesaj iş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 ve hata mesajı aşağıdaki gibi gösterilmektedir:
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 ileti işlemcileri, trafiği doğru API proxy'sine yönlendirmek için hem ana makine başlığını, hem bağlantı noktası numarasını hem de URI yollarını kullanır. Aynı ana makine takma adına ve bağlantı noktası numarasına sahip birden fazla sanal ana makine gibi belirsiz tanımlar, belgelenmiş bir anti-pattern'dir ve beklenmedik davranışlara yol açabilir. Gözlemleyeceğiniz yaygın hatalardan biri, 404 mesajını içeren bir Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH 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, söz konusu API proxy'sinin istekleri yalnızca sanal ana makineye kabul edecek şekilde yapılandırılmış olması olabilir. API istekleri, API proxy'sinde yapılandırılan belirli 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 hatalarla başarısız olur.
404 Unable to identify proxy for host: <virtual host name> and url: <path> (404 Ana makine için proxy tanımlanamıyor: <sanal ana makine adı> ve URL: <yol>) başlıklı makalede verilen talimatları uygulayın ve bu hatayı giderin. Bu hataya neden olan bir durum yoksa aşağıdaki adımları uygulayarak
yinelenen ana makine takma adlarına sahip sanal ana makinelerin 404 hatalarına neden olup olmadığını belirleyin.
Teşhis
Aynı ana makine takma adına/bağlantı noktası numarasına sahip birden fazla sanal ana makine olup olmadığını belirlemek için aşağıdaki yöntemlerden birini kullanın. Bu durum 404 hatalarına yol açar:
- 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 makine olup olmadığını belirlemek için bu talimatları kullanın.
Örneğin, 404 hatasını http://example.com:9001/proxy1 URL'siyle birlikte gözlemlediyseniz hangi sanal ana makineye example.com ana makine takma adının ve 9001 bağlantı noktasının atandığını bulmanız gerekir.
- Public Cloud ve Private Cloud'daki yeni Edge kullanıcı arayüzünde:
- Yönetici'yi 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şen Sanal Ana Makineleri belirlemek üzere 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 bir Ortam için Sanal Ana Bilgisayarlar listesini görüntüleyerek API isteklerinin çağrıldığı belirli Ana Bilgisayar Takma Adı ile eşleşen olup olmadığını kontrol edin.
- 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 gidin.
Örnek:

Yönetim API'leri
Yönetim API'lerini kullanarak aynı ana makine takma adına/bağlantı noktası numarasına sahip birden fazla sanal ana makine 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şlarınızdaki her ortamda bulunan sanal ana makinelerin tanımlarını alın:
Örneğin,
404hatasınıhttp://example.com:9001/proxy1URL'siyle birlikte gözlemlediyseniz hangi sanal ana makinelerinexample.comana makine takma adı ve9001bağlantı noktasına sahip 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 her bir sanal ana makinenin tanımını alın.
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" : [ ] }Kuruluşunuzdaki diğer ortamlar için yukarıdaki iki adımı tekrarlayın.
Bu örnekte,
devortamı için 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ı ortamda (
testvedev) bulunan iki sanal ana makinenin (default) aynı ana makine takma adını (example.com) ve bağlantı noktası numarasını (9001) içerdiği görülmektedir. Bu durum,404hatalarına neden olur.- 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 gidin.
Çö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 tanımladıysanız 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 uygun bir DNS girişi olduğundan emin olun.
- Yukarıda bahsedilen örnekte yapılandırmamız şu şekildeyse:
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.
- Yani ana makine takma adını
example2.comolarak 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" : [ ] }' -iHTTP/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" : [ ] }
- API çağrılarını proxy'ye tekrar yapın ve sürekli olarak 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 Toplanması gereken teşhis bilgileri bölümüne gidin.
Teşhis bilgilerini toplamalıdır
Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve 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ı
404hatasını yeniden oluşturmak içincurlkomutunu tamamlayın.404hataları şu anda oluşmuyorsa geçmişte404hatalarının oluştuğu zaman aralığını saat dilimi bilgisiyle birlikte belirtin.
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ı
- Gözlemlediğiniz kuruluş, ortam adı ve API proxy adı
404hataları - API proxy paketi
- NGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log - Mesaj işleyici günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log 404hatalarının oluştuğu saat dilimi bilgisiyle birlikte zaman aralığı