Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 503 Service Unavailable
dengan
kode error protocol.http.ProxyTunnelCreationFailed
sebagai respons untuk panggilan API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 503 Service Unavailable
Selain itu, Anda mungkin melihat pesan error berikut:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Meneruskan proxy dan tunneling
Apigee Edge memungkinkan proxy API Anda berkomunikasi dengan server backend melalui proxy
server seperti yang dijelaskan dalam
Mengonfigurasi proxy penerusan. Server proxy akan membuka jaringan yang aman (HTTPS) atau tidak aman
(HTTP) ke server backend, bergantung pada jenis proxy (yang ditunjukkan
oleh properti HTTPClient.proxy.type
) yang digunakan dan mentransfer data
di kedua arah. Langkah ini dikenal sebagai tunneling.
Secara default, Apigee Edge menggunakan tunneling untuk semua traffic. Untuk menonaktifkan tunneling, properti
HTTPClient.use.tunneling
harus disetel ke false
.
Kode Kesalahan: protocol.http.ProxyTunnelCreationFailed
Apigee Edge menampilkan kode error protocol.http.ProxyTunnelCreationFailed
jika
server proxy tidak dapat membuat tunnel antara Apigee Edge dan server backend karena
masalah seperti firewall, pembatasan ACL (Daftar Kontrol Akses), masalah DNS, server backend
ketidaktersediaan, waktu tunggu, dll.
Kode status dalam faultstring
respons dari Apigee Edge biasanya
menunjukkan kemungkinan penyebab tingkat tinggi yang telah menyebabkan error ini.
Template faultstring:
Proxy refused to create tunnel with response status STATUS_CODE
Kemungkinan penyebab untuk beberapa kode status yang diamati di faultstring:
Tabel berikut menjelaskan kemungkinan penyebab bergantung pada kode status yang ditunjukkan di
faultstring
:
{i>Faultstring<i} | Deskripsi |
---|---|
Proxy menolak membuat tunnel dengan status respons 403 |
Hal ini dapat terjadi mungkin karena batasan {i>firewall<i} atau ACL yang dikonfigurasi pada server backend yang mencegah pembuatan tunnel. |
Proxy menolak membuat tunnel dengan status respons 503 |
Hal ini dapat terjadi karena masalah DNS, pembatasan {i>firewall<i}, server backend ketidaktersediaan yang mencegah pembuatan tunnel |
Proxy menolak membuat tunnel dengan status respons 504 |
Hal ini dapat terjadi jika ada waktu tunggu selama pembuatan tunnel |
Bergantung pada kode status yang diamati di faultstring
, Anda harus menggunakan
teknik yang tepat untuk
memecahkan masalah tersebut. Playbook ini menjelaskan cara memecahkan masalah
masalah jika Anda mengamati kode status 403
di faultstring
untuk kode error protocol.http.ProxyTunnelCreationFailed
.
Kemungkinan penyebab
Error ini (kode status 403
) terjadi jika ada firewall atau ACL (Akses
Control List) yang dikonfigurasi di server backend
yang mencegah tunnel
yang dibuat antara Apigee Edge dan server backend oleh server proxy.
Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk |
---|---|---|
Proxy menolak membuat tunnel dengan status respons 403 | Server proxy menolak membuat tunnel karena menerima nama host server Proxy
bukan nama host server Backend di header Host . |
Khusus pengguna Edge Private Cloud |
Langkah-langkah diagnosis umum
Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:
Alat rekaman aktivitas
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi rekaman aktivitas dan
antara:
- Tunggu hingga terjadi error, atau
- Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah
503 Service Unavailable
denganProxy refused to create tunnel with response status 403
.
Pastikan Tampilkan semua FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
- Menavigasi melalui berbagai fase pelacakan dan menemukan letak kegagalan terjadi.
Anda akan melihat error ini biasanya setelah fase Alur Permintaan Target Dimulai sebagaimana ditunjukkan di bawah ini:
Perhatikan informasi berikut:
error:
Proxy refused to create tunnel with response status 403
- Buka Fase AX (Data Analytics Direkam) di rekaman aktivitas, lalu klik Fase tersebut.
Scroll ke bawah ke bagian Fase Details Response Headers dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai yang ditampilkan di bawah ini:
Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai
protocol.http.ProxyTunnelCreationFailed
dantarget
, yang menunjukkan bahwa error ini disebabkan karena tunnel proxy pembuatan gagal karena header host yang diharapkan tidak diterima.Header Respons Nilai X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk
menentukan informasi penting tentang HTTP
503 Service Unavailable
yang sama. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Di mana: ORG, ORG, dan PORT# diganti dengan nilai sebenarnya.
- Telusuri apakah ada
503
error dengan kode errorprotocol.http.ProxyTunnelCreationFailed
selama durasi tertentu (jika terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan503
. Jika Anda menemukan error
503
dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.ProxyTunnelCreationFailed
, lalu tentukan nilai X-Apigee-fault-source.Contoh error 503 dari log akses NGINX:
Contoh entri di atas dari log akses NGINX memiliki nilai berikut untuk X- Apigee-fault-code dan X-Apigee-fault-source:
Header Respons Nilai X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
Penyebab: Proxy menolak membuat tunnel dengan status respons 403
Diagnosis
- Tentukan Kode Kesalahan dan Sumber Kesalahan untuk
503 Service Unavailable
menggunakan Alat Pelacakan atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Tinjau Pesan Error dan tentukan kode status
diindikasikan dalam
faultstring
untuk kegagalan pembuatan tunnel. - Dalam skenario ini, kode statusnya adalah
403
, yang berarti Dilarang. - Artinya, tidak ada hak atau hak istimewa yang memadai untuk membuat tunnel. Hal ini dapat biasanya terjadi jika ada pembatasan {i>firewall<i} atau ACL ({i>Access Control List)<i} yang mencegah pembuatan tunnel.
- Tinjau pembatasan firewall dan/atau ACL apa pun yang dikonfigurasi di server backend yang dapat mencegah pembuatan tunnel.
- Bergantung pada jenis firewall dan/atau pembatasan ACL, Anda perlu memperbaiki masalahnya dengan tepat.
Mari kita lihat contoh pembatasan {i>firewall<i} untuk menjelaskan cara memecahkan dan mengatasi masalah ini masalah:
Skenario: Pembatasan firewall di server backend mengharuskan Header Host selalu berisi nama host server backend
Anda dapat menggunakan salah satu cara berikut untuk menentukan Host Header yang diteruskan oleh Apigee Edge:
Trace
Untuk menentukan Header Host menggunakan Trace:
- Pastikan
faultstring
berisiProxy refused to create tunnel with response status 403
menggunakan rekaman aktivitas seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Arahkan ke fase Alur Permintaan Target Dimulai dan tinjau Header Permintaan
- Verifikasi nilai nama host yang ditentukan pada Header host di Bagian Header Permintaan.
- Jika header Host berisi nama host proxy, maka itu adalah yang menyebabkan error ini.
- Hal ini karena firewall dikonfigurasi pada server backend untuk menerima hanya jika Host Header berisi nama server backend.
- Jadi, ketika server {i>proxy<i} mencoba
membuat terowongan dengan server {i>backend<i}, itu
gagal disertai error
Proxy refused to create tunnel with response status 403
.Contoh rekaman aktivitas yang menunjukkan Header Host yang memiliki nama host proxy
( lihat gambar yang lebih besar)
Dalam contoh rekaman aktivitas yang ditampilkan di atas, terlihat bahwa Host Header berisi nama host proxy
www.proxyserver.com.
Karena ada pembatasan {i>firewall<i} yang dikonfigurasi pada server {i> backend <i}yang hanya mengharapkan nama host server backend yang akan dimuat di Host Header, Anda akan mendapatkan errorProxy refused to create tunnel with response status 403
.
tcpdump
Untuk menentukan Header Host menggunakan tcpdump
Mengambil
tcpdump
di server proxy untuk permintaan yang berasal Komponen Pemroses Pesan Apigee Edge dengan perintah berikut:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Untuk informasi selengkapnya tentang penggunaan perintah
tcpdump
, lihat tcpdump.- Analisis data
tcpdump
menggunakan alat Wireshark atau yang serupa menyediakan alat command line gcloud. Berikut adalah contoh analisis dari tcpdump menggunakan Wireshark:
- Nomor paket 13, 14, dan 15 menunjukkan bahwa pesan Prosesor sedang membuat koneksi ke server proxy melalui TCP tiga arah proses handshake.
- Dalam paket 16, Pemroses Pesan telah terhubung ke host proxy
httpbin.org
(ditunjukkan dalam contoh di atas). Pilih paket 16 dan periksa isi paket secara mendetail dan khususnya Header Host yang diteruskan ke server proxy oleh Message Pemroses.
- Contoh di atas menunjukkan Host Header
httpin.org
, yang adalah nama {i>host<i} dari server {i>proxy<i}. Oleh karena itu, ketika server {i>proxy<i} mencoba untuk membuat tunnel dengan server backend dengan meneruskan Host Header di atashttpin.org
, gagal dengan errorProxy refused to create tunnel with response status 403
.
- Pastikan
Resolusi
Skenario: Pembatasan firewall pada server proxy mengharuskan Header Host harus selalu berisi nama host server backend
Jika Anda telah memastikan bahwa kesalahan ini disebabkan karena {i>firewall<i} di server backend dikonfigurasi sedemikian rupa sehingga Host Header harus selalu berisi server backend nama host Anda, saat Pemroses Pesan mengirim nama host server proxy, lalu menjalankan langkah-langkah berikut untuk menyelesaikan masalah tersebut:
Tetapkan properti
use.proxy.host.header.with.target.uri
ke benar (true) di TargetEndpoint seperti yang ditunjukkan dalam contoh berikut:Contoh konfigurasi TargetEndpoint:
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>https://mocktarget.apigee.net/json</URL> <Properties> <Property name="use.proxy.host.header.with.target.uri">true</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
Pastikan bahwa properti lain yang terkait dengan teruskan proxy dikonfigurasi pada Pemroses Pesan sebagai berikut:
- Tinjau file
/opt/apigee/customer/application/message-processor.properties
di setiap Pemroses Pesan. Pastikan properti berikut ditetapkan sesuai dengan kasus penggunaan atau persyaratan Anda:
Contoh nilai untuk properti:
conf_http_HTTPClient.use.proxy=true conf/http.properties+HTTPClient.proxy.type=HTTP conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME conf/http.properties+HTTPClient.proxy.port=PORT_# conf/http.properties+HTTPClient.proxy.user=USERNAME conf/http.properties+HTTPClient.proxy.password=PASSWORD
- Tinjau file
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 Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama lingkungan
- Paket proxy API
- File rekaman aktivitas untuk permintaan API
Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Tempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message-processor/logs/system.log