Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 404
dengan pesan Not
Found
dan pesan error Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
sebagai respons terhadap panggilan API.
Error ini berarti Edge tidak dapat menemukan proxy API untuk jalur dan host virtual yang ditentukan.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 404 Not Found
Selain itu, Anda mungkin melihat pesan error yang mirip dengan yang ditampilkan di bawah ini:
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
Kemungkinan penyebab
Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk |
---|---|---|
Host virtual dengan alias host duplikat | Beberapa host virtual memiliki alias host dan nomor port yang sama. | Pengguna Edge Public dan Private Cloud |
Langkah-langkah diagnosis umum
Log NGINX dan Pemroses Pesan akan berguna dalam memecahkan masalah error 404
.
Gunakan langkah-langkah berikut untuk memeriksa log:
- Lihat log NGINX menggunakan perintah berikut:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Periksa kolom berikut dalam entri log:
Kolom Nilai Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Catat ID pesan dari log.
- Memeriksa log Pemroses Pesan
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
untuk melihat apakah Anda memilikimessaging.adaptors.http.flow.ApplicationNotFound
untuk API tertentu atau jika Anda memiliki ID unik ID pesan dari langkah 2 untuk permintaan API.Contoh pesan error dari log Pemroses Pesan
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)
Log di atas menampilkan kode error dan pesan error adalah sebagai berikut:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Penyebab: Beberapa host virtual dengan alias host dan nomor port yang sama
Router Edge Apigee dan Prosesor Pesan menggunakan header host, nomor port, dan jalur URI
untuk merutekan traffic ke proxy API yang benar. Memiliki definisi yang ambigu seperti beberapa
{i>host <i}dengan alias {i>host<i} dan nomor
porta yang sama adalah
anti-pola dan
dapat menyebabkan
perilaku yang tidak terduga. Salah satu kesalahan umum yang
akan Anda amati adalah
404
error dengan pesan Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
.
Biasanya jika terdapat beberapa {i>host<i} virtual dengan alias {i>host<i} yang sama, maka Anda akan mengamati
404
error yang terputus-putus. Hal ini karena Proxy API tertentu dapat dikonfigurasi
untuk menerima permintaan hanya pada
salah satu {i>host<i} virtual. Saat permintaan API dirutekan ke
{i>host<i} virtual tertentu yang dikonfigurasi di {i>Proxy<i} API, Anda akan
mendapatkan respons yang berhasil.
Namun, jika permintaan API dirutekan ke host virtual lain tempat Proxy API
tidak dikonfigurasi untuk menerima permintaan, maka API akan gagal dengan 404
yang sama.
Ikuti petunjuk yang diberikan di
404 Tidak dapat mengidentifikasi proxy untuk host: <nama host virtual> dan url: <path> serta
memecahkan masalah {i>error<i} ini. Jika tidak ada penyebab yang menyebabkan error ini, gunakan langkah-langkah
di bawah ini untuk menentukan apakah host virtual dengan alias host duplikat menyebabkan 404
yang sama.
Diagnosis
Gunakan salah satu metode berikut untuk menentukan apakah ada beberapa {i>host<i} virtual yang memiliki
alias/port host yang sama # yang menyebabkan 404
error:
- UI Edge
- API pengelolaan
UI Edge
Gunakan petunjuk ini untuk menentukan apakah ada beberapa {i>host<i} virtual yang memiliki {i>host<i} yang sama alias/port # menggunakan UI Edge.
Misalnya, jika Anda mengamati error 404
pada URL
http://example.com:9001/proxy1
, maka Anda perlu mencari {i>host<i} virtual
alias host example.com
dan port 9001
.
- Di Public Cloud dan UI Edge baru di Private Cloud:
- Pilih Admin.
- Pilih Host Virtual.
- Untuk setiap Lingkungan, gunakan filter penelusuran untuk menentukan atribut Virtual Host yang cocok dengan Alias Host tertentu yang digunakan API semua permintaan dipanggil.
- Jika Anda menemukan beberapa Host Virtual yang menggunakan Alias Host yang sama, buka Penyelesaian untuk mengatasi masalah ini.
Contoh:
- Di UI Klasik di Private Cloud:
- Pilih tab API .
- Pilih Environment Configuration.
- Pilih Host Virtual.
- Untuk setiap Environment, lihat daftar Host Virtual untuk melihat apakah ada kecocokan Alias Host tertentu yang digunakan untuk memanggil permintaan API.
- Jika Anda menemukan beberapa Host Virtual yang cocok dengan Alias Host yang sama, buka Penyelesaian untuk mengatasi masalah ini.
Contoh:
API pengelolaan
Gunakan petunjuk ini untuk menentukan apakah ada beberapa {i>host<i} virtual yang memiliki {i>host<i} yang sama Alias/port # menggunakan API Pengelolaan.
Dapatkan definisi dari setiap {i>host<i} virtual di setiap lingkungan di untuk melihat {i>host<i} virtual mana yang memiliki alias {i>host<i} dan nomor port yang sama:
Misalnya, jika Anda mengamati error
404
pada URLhttp://example.com:9001/proxy1
, maka Anda perlu menemukan host memiliki alias hostexample.com
dan porta9001
.Mendapatkan daftar lingkungan
Pengguna Cloud Publik:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Pengguna Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Dengan keterangan:
ORGANIZATION_NAME adalah nama organisasi
Contoh:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Mendapatkan daftar host virtual dalam lingkungan
Pengguna Cloud Publik:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Pengguna Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Dengan keterangan:
ORGANIZATION_NAME adalah nama organisasi
ENVIRONMENT_NAME adalah nama lingkungan
Contoh:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Dapatkan definisi dari masing-masing {i>host<i} virtual di lingkungan tersebut.
Pengguna Cloud Publik:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Pengguna Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Dengan keterangan:
ORGANIZATION_NAME adalah nama organisasi
ENVIRONMENT_NAME adalah nama lingkungan
VIRTUAL_HOST_NAME adalah nama virtual host
Contoh:
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" : [ ] }
Ulangi dua langkah di atas untuk lingkungan lainnya di organisasi Anda.
Dalam contoh ini, ulangi langkah-langkah untuk lingkungan
dev
: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" : [ ] }
Dalam contoh ini, Anda dapat melihat bahwa kedua host virtual
default
di dua lingkungan yang berbeda,test
dandev
, keduanya berisi alias hostexample.com
dan nomor port yang sama9001
. Ini adalah penyebab error404
.- Jika Anda menemukan beberapa Host Virtual yang cocok dengan Alias Host yang sama, buka Penyelesaian untuk mengatasi masalah ini.
Resolusi
- Pastikan setiap host virtual hanya berisi kombinasi port dan alias host yang unik.
- Jika Anda telah mengidentifikasi beberapa host virtual dengan alias host dan kombinasi port yang sama maka Anda harus memperbaruinya dengan alias {i>host<i} yang unik.
- Anda dapat memperbaruinya menggunakan UI Edge atau Management API. Petunjuknya dapat ditemukan di bawah Mengubah host virtual.
- Pastikan setiap alias host memiliki entri DNS yang tepat.
- Pada contoh yang dibahas di atas, jika konfigurasi kita terlihat seperti ini:
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" : [ ] }
- Anda dapat memperbarui host virtual yang salah supaya tidak tumpang tindih.
- Yaitu memperbarui alias host sebagai
example2.com
. - Pastikan alias host baru memiliki entri DNS yang serupa dengan alias host sebelumnya.
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" : [ ] }
- Lakukan panggilan API lagi ke proxy dan verifikasi bahwa Anda mendapatkan respons yang berhasil secara konsisten:
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" } }
- Jika masalah masih berlanjut, buka Harus mengumpulkan informasi diagnostik.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik, lalu hubungi Dukungan Apigee Edge:
Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama Proxy API
- Selesaikan perintah
curl
untuk mereproduksi error404
- Jika error
404
tidak terjadi saat ini, berikan jangka waktu dengan informasi zona waktu saat terjadi error404
di masa lalu.
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama Proxy Organisasi, Lingkungan, dan Nama Proxy API yang Anda amati
404
error - Paket Proxy API
- Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- Log Pemroses Pesan
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Jangka waktu dengan informasi zona waktu saat terjadi error
404