Memecahkan masalah App Service di Application Gateway

Pelajari cara mendiagnosis dan mengatasi masalah yang mungkin Anda temui saat Azure App Service digunakan sebagai target backend dengan Azure Application Gateway.

Gambaran Umum

Dalam artikel ini, Anda akan mempelajari cara memecahkan masalah berikut, seperti yang dijelaskan secara lebih rinci di Architecture Center: Mempertahankan nama host HTTP asli antara proksi terbalik dan aplikasi web backend-nya

  • URL absolut yang salah
  • URL pengalihan yang salah
    • URL layanan aplikasi diekspos di browser saat ada pengalihan
    • contoh ini: alur autentikasi OIDC rusak karena pengalihan dengan nama host yang salah; ini termasuk penggunaan Autentikasi dan Otorisasi App Service
  • Cookie rusak
    • cookie tidak disebarluaskan antara browser dan App Service
    • contoh ini: domain cookie ARRAffinity layanan aplikasi diatur ke nama host layanan aplikasi dan terkait dengan "example.azurewebsites.net", bukan host asli. Akibatnya, afinitas sesi rusak.

Akar penyebab gejala di atas adalah pengaturan yang mengambil alih nama host seperti yang digunakan oleh Application Gateway menuju App Service ke nama host yang berbeda seperti yang terlihat oleh browser. Seringkali nama host diganti ke domain "azurewebsites.net" App Service default.

Root cause - Application Gateway overwrites hostname to azurewebsites.net

Konfigurasi sampel

Jika konfigurasi Anda cocok dengan salah satu dari dua situasi di bawah ini, penyiapan Anda tunduk pada instruksi dalam artikel ini:

  • Pilih Nama Host dari Alamat Backend diaktifkan di http Pengaturan
  • Ambil alih dengan nama domain tertentu diatur ke nilai yang berbeda dari apa yang dimiliki permintaan browser

Penyebab

Karena App Service adalah layanan multi-penyewa, ia menggunakan header host dalam permintaan untuk merutekan permintaan ke titik akhir yang benar. App Services memiliki nama domain default *.azurewebsites.net (misalnya contoso.azurewebsites.net) yang berbeda dari nama domain gateway aplikasi (misalnya, contoso.com). App Service backend tidak memiliki konteks yang diperlukan untuk menghasilkan url pengalihan atau cookie yang selaras dengan domain seperti yang dilihat oleh browser.

Solusi

Solusi yang direkomendasikan produksi adalah mengonfigurasi Application Gateway dan App Service untuk tidak mengambil alih nama host. Ikuti instruksi untuk "Domain Kustom (disarankan)" di Mengonfigurasi App Service dengan Application Gateway

Hanya pertimbangkan untuk menerapkan solusi lain (seperti penulisan ulang header Lokasi seperti yang dijelaskan di bawah) setelah menilai implikasi seperti yang dijelaskan dalam artikel: Pertahankan nama host HTTP asli antara proksi terbalik dan aplikasi web backend-nya. Implikasi ini termasuk potensi cookie yang terikat domain dan url absolut di luar header lokasi, agar tetap rusak.

Solusi sementara: menulis ulang header Lokasi

Peringatan

Konfigurasi ini dilengkapi dengan batasan. Sebaiknya tinjau implikasi penggunaan nama host yang berbeda antara klien dan Application Gateway dan antara Aplikasi dan App Service di backend. Untuk informasi selengkapnya, silakan tinjau artikel di Pusat Arsitektur: Pertahankan nama host HTTP asli antara proksi terbalik dan aplikasi web backend-nya

Atur nama host di header lokasi ke nama domain gateway aplikasi. Untuk melakukan langkah ini, buat aturan tulis ulang dengan kondisi yang mengevaluasi apakah header lokasi dalam respons berisi azurewebsites.net. Harus juga dilakukan tindakan untuk menulis ulang header lokasi supaya memiliki nama host gateway aplikasi. Untuk informasi selengkapnya, lihat instruksi cara menulis ulang header lokasi.

Catatan

Dukungan penulisan ulang header HTTP hanya tersedia untuk Standard_v2 and WAF_v2 SKU Application Gateway. Sebaiknya migrasi ke v2 untuk Penulisan Ulang Header dan kemampuan canggih lainnya yang tersedia dengan SKU v2.

Langkah berikutnya

Jika langkah-langkah sebelumnya tidak mengatasi masalah, buka tiket dukungan.