Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. 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ğı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 | Ş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 Private Cloud kullanıcıları |
Sık kullanılan teşhis adımları
NGINX ve İleti İş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.
- İleti İşleyici günlüklerini kontrol etme
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
belirli API içinmessaging.adaptors.http.flow.ApplicationNotFound
kullanıyorsanız veya API isteği için 2. adımdaki mesaj kimliği.İleti İşleyici günlüğündeki örnek hata iletisi
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ı şöyledir:
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 İşlemcileri hem ana makine üst bilgisini, hem de bağlantı noktası numarasını ve URI yollarını kullanır
. Belirsiz tanımlara sahip olma (ör. birden fazla sanal
aynı ana makine takma adına ve bağlantı noktası numarasına sahip ana makinelerin
anti-pattern ve
beklenmedik davranışlara yol açabilir. Karşılaşacağınız yaygın hatalardan biri,
Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
mesajıyla birlikte 404
hatası.
Genellikle aynı ana makine takma adına sahip birden fazla sanal ana makine varsa
aralıklı 404
hataları var. Bunun nedeni, ilgili API Proxy'sinin yapılandırılmış olmasıdır.
yalnızca bir sanal ana makinedeki istekleri kabul etmesini sağlar. API istekleri
özel bir sanal ana makine kullanmayı tercih ederseniz başarılı bir yanıt alırsınız.
Ancak API istekleri, API Proxy'sinin yönlendirdiği diğer sanal ana makinelere yönlendirildiğinde
isteği kabul edecek şekilde yapılandırılmadığında API'ler bu 404
ile başarısız olur.
hatalar.
Şurada verilen talimatları uygulayın:
404 Ana makine için proxy tanımlanamıyor: <sanal ana makine adı> and url: <path> ve
bu hatayı giderebilirsiniz. Nedenlerin hiçbiri bu hataya neden olmuyorsa aşağıdaki adımları uygulayın:
aşağıdaki adımları uygulayarak, 404
hatasına yinelenen ana makine takma adlarına sahip sanal ana makinelerin neden olup olmadığını belirleyebilirsiniz.
hatalar.
Teşhis
Aşağıdaki yöntemlerden birini kullanarak
404
hatalarına neden olan aynı ana makine takma adı/bağlantı noktası numarası:
- Edge kullanıcı arayüzü
- Yönetim API'leri
Edge kullanıcı arayüzü
Aynı ana makineye sahip birden fazla sanal ana makine olup olmadığını belirlemek için bu talimatları uygulayın. takma adı/bağlantı noktası numarasını girin.
Örneğin, URL'de 404
hatasını gözlemlediyseniz
http://example.com:9001/proxy1
içeriyorsa hangi sanal ana makinelerin
example.com
ana makine takma adı ve 9001
bağlantı noktası.
- Herkese Açık Bulut'ta ve Private Cloud'da yeni Edge kullanıcı arayüzünde:
- Yönetici'yi seçin.
- Sanal Ana Makineler'i seçin.
- Her Ortam için arama filtresini kullanarak Sanal API'nin kullanıldığı belirli Ana Makine Takma Adı ile eşleşen ana makineler talep çağrıldı.
- Aynı Ana Makine Takma Adını kullanan birden fazla Sanal Ana Makine bulursanız Bu sorunu çözmek için çözüm.
Ö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 Sanal Ana Makineler listesini görüntüleyerek herhangi bir eşleşme olup olmadığına bakın. API isteklerinin çağrıldığı Ana Makine Takma Adı.
- Aynı Ana Makine Takma Adı ile eşleşen birden fazla Sanal Ana Makine bulursanız Bu sorunu çözmek için çözüm.
Örneğin:
Yönetim API'leri
Aynı ana makineye sahip birden fazla sanal ana makine olup olmadığını belirlemek için bu talimatları uygulayın. takma adı/bağlantı noktası numarası eklemelidir.
İşletim sisteminizdeki ortamların her birinde bulunan sanal ana makinelerin her birinin kuruluşlarına hangi sanal ana makinelerin aynı ana makine takma adına ve bağlantı noktası numarasına sahip olduğunu görme:
Örneğin, URL'de
404
hatasını gözlemlediysenizhttp://example.com:9001/proxy1
kullanıyorsanız hangi sanal ana makinelerexample.com
ana makine takma adına ve9001
bağlantı noktasına sahiptir.Ortamların listesini alma
Herkese açık Cloud 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 Cloud 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 Cloud 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 tekrarlayın.
Bu örnekte,
dev
ortamı 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 gördüğünüz gibi, iki sanal ana makinenin
default
test
vedev
olmak üzere iki farklı ortamda Aynı ana makine takma adını (example.com
) ve bağlantı noktası numarasını içermelidir9001
.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.
Çö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. İlgili talimatlar altında Sanal ana makineyi değiştirme
- 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.
- Bu, ana makine takma adını
example2.com
olarak güncellemeniz anlamına gelir. - Yeni barındırıcı 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 toplanması gerekiyor başlıklı makaleyi inceleyin.
Teşhis bilgileri toplanmalıdır
Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki 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ı
404
hatasını yeniden oluşturmak içincurl
komutunu tamamlayın- Şu anda
404
hataları görünmüyorsa dönemi belirtin Geçmişte404
hata oluştuğunda saat dilimi bilgileriyle birlikte.
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
- Gözlemlediğiniz kuruluş, ortam adı ve API proxy adı
404
hata - 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 meydana geldiği saat dilimi bilgilerini içeren dönem