Mengonfigurasi Application Gateway dengan App Service
Artikel
14 menit untuk membaca
Application gateway memungkinkan Anda memiliki aplikasi App Service atau layanan multi-tenant lainnya sebagai anggota kumpulan ujung-belakang. Dalam artikel ini, Anda belajar mengonfigurasi aplikasi App Service dengan Application Gateway. Konfigurasi untuk Application Gateway akan berbeda tergantung pada bagaimana App Service akan diakses:
Opsi pertama menggunakan domain kustom pada Application Gateway dan App Service di backend.
Opsi kedua adalah memiliki akses Application Gateway App Service menggunakan domain defaultnya, dengan akhiran ".azurewebsites.net".
Konfigurasi ini direkomendasikan untuk skenario tingkat produksi dan memenuhi praktik tidak mengubah nama host dalam alur permintaan. Anda diharuskan memiliki domain kustom (dan sertifikat terkait) yang tersedia untuk menghindari keharusan mengandalkan domain ".azurewebsites" default.
Dengan mengaitkan nama domain yang sama dengan Application Gateway dan App Service di kumpulan backend, alur permintaan tidak perlu mengambil alih nama host. Aplikasi web backend akan melihat host asli seperti yang digunakan oleh klien.
Konfigurasi ini adalah yang paling mudah dan tidak memerlukan domain kustom. Dengan demikian memungkinkan pengaturan yang nyaman dengan cepat.
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: Mempertahankan nama host HTTP asli antara proksi terbalik dan aplikasi web backend-nya
Ketika App Service tidak memiliki domain kustom yang terkait dengannya, header host pada permintaan masuk pada aplikasi web perlu diatur ke domain default, dicukupkan dengan ".azurewebsites.net" atau platform tidak akan dapat merutekan permintaan dengan benar.
Header host dalam permintaan asli yang diterima oleh Application Gateway akan berbeda dari nama host App Service backend.
Dalam artikel ini, Anda akan mempelajari cara:
Mengonfigurasi DNS
Menambahkan App Service sebagai kumpulan backend ke Application Gateway
Mengonfigurasi Pengaturan HTTP agar koneksi App Service
App Service: Jika Anda tidak memiliki App Service yang sudah ada, lihat dokumentasi App Service.
Nama domain kustom dan sertifikat terkait (ditandatangani oleh otoritas terkenal), disimpan dalam Key Vault. Untuk informasi selengkapnya tentang cara menyimpan sertifikat di Key Vault, lihat Tutorial: Mengimpor sertifikat di Azure Key Vault
Rutekan pengguna atau klien untuk Application Gateway menggunakan domain kustom. Siapkan DNS menggunakan alias CNAME yang diarahkan ke DNS untuk Application Gateway. Alamat DNS Application Gateway ditampilkan di halaman gambaran umum alamat IP Publik terkait. Atau buat catatan A yang menunjuk ke alamat IP secara langsung. (Untuk Application Gateway V1 VIP dapat berubah jika Anda menghentikan dan memulai layanan, yang membuat opsi ini tidak diinginkan.)
App Service harus dikonfigurasi sehingga menerima lalu lintas dari Application Gateway menggunakan nama domain kustom sebagai host masuk. Untuk informasi selengkapnya tentang cara memetakan domain kustom ke App Service, lihat Tutorial: Memetakan nama DNS kustom yang sudah ada ke Azure App Service Untuk memverifikasi domain, App Service hanya memerlukan penambahan catatan TXT. Tidak diperlukan perubahan pada CNAME atau catatan A. Konfigurasi DNS untuk domain kustom akan tetap diarahkan ke Application Gateway.
Saat tidak ada domain kustom yang tersedia, pengguna atau klien dapat mengakses Application Gateway menggunakan alamat IP gateway atau alamat DNS-nya. Alamat DNS Application Gateway dapat ditemukan di halaman gambaran umum alamat IP Publik terkait. Tidak memiliki domain kustom yang tersedia menyiratkan bahwa tidak ada sertifikat yang ditandatangani secara publik yang akan tersedia untuk TLS di Application Gateway. Klien dibatasi untuk menggunakan HTTP atau HTTPS dengan sertifikat yang ditandatangani sendiri, yang keduanya tidak diinginkan.
Untuk menyambungkan ke App Service, Application Gateway menggunakan domain default sebagaimana disediakan oleh App Service (akhiran "azurewebsites.net").
Menambahkan layanan Aplikasi sebagai kumpulan ujung belakang
Pada Kumpulan ujung belakang, pilih salah satu kumpulan ujung belakang.
Pada Jenis target, pilih App Services.
Pada Target pilih App Service.
Catatan
Menu turun tersebut hanya mengisi layanan aplikasi yang ada di langganan yang sama dengan Gateway Aplikasi Anda. Jika Anda ingin menggunakan layanan aplikasi yang berada dalam langganan yang berbeda dari langganan tempat Application Gateway berada, maka alih-alih memilih App Services di menu dropdown Target, pilih alamat IP atau opsi nama host dan masukkan nama host (example.azurewebsites.net) layanan aplikasi.
Pilih Simpan.
# Fully qualified default domain name of the web app:
$webAppFQDN = "<nameofwebapp>.azurewebsite.net"
# For Application Gateway: both name, resource group and name for the backend pool to create:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add a new Backend Pool with App Service in there:
Add-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw -BackendFqdns $webAppFQDN
# Update Application Gateway with the new added Backend Pool:
Set-AzApplicationGateway -ApplicationGateway $gw
Pengaturan HTTP diperlukan yang menginstruksikan Application Gateway untuk mengakses backend App Service menggunakan nama domain kustom. Pengaturan HTTP secara default akan menggunakan pemeriksaan kesehatan default yang bergantung pada nama host seperti yang dikonfigurasi di Kumpulan Backend (dengan akhiran "azurewebsites.net"). Untuk alasan ini, ada baiknya untuk terlebih dahulu mengonfigurasi pemeriksaan kesehatan kustom yang dikonfigurasi dengan nama domain kustom yang benar sebagai nama host-nya.
Kami akan terhubung ke backend menggunakan HTTPS.
Di bawah Pengaturan HTTP, pilih pengaturan HTTP yang sudah ada atau tambahkan yang baru.
Saat membuat Pengaturan HTTP baru, beri nama
Pilih HTTPS sebagai protokol backend yang diinginkan menggunakan port 443
Pastikan untuk mengatur "Ganti dengan nama host baru" ke "Tidak"
Pilih pemeriksaan kesehatan HTTPS kustom di menu dropdown untuk "Pemeriksaan kustom".
Catatan
Ini akan bekerja dengan pemeriksaan default tetapi untuk kebenaran, sebaiknya gunakan pemeriksaan kustom dengan nama domain yang benar.)
Pengaturan HTTP diperlukan yang menginstruksikan Application Gateway untuk mengakses backend App Service menggunakan nama domain default ("azurewebsites.net"). Untuk melakukannya, Pengaturan HTTP akan secara eksplisit mengambil alih nama host.
Di bawah Pengaturan HTTP, pilih pengaturan HTTP yang sudah ada atau tambahkan yang baru.
Saat membuat Pengaturan HTTP baru, beri nama
Pilih HTTPS sebagai protokol backend yang diinginkan menggunakan port 443
Pastikan untuk mengatur "Ganti dengan nama host baru" ke "Ya"
Di bagian "Penimpaan nama host", pilih "Pilih nama host dari target backend". Pengaturan ini akan menyebabkan permintaan terhadap App Service menggunakan nama host "azurewebsites.net", seperti yang dikonfigurasi di Kumpulan Backend.
# Configure Application Gateway to connect to App Service using the incoming hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$customProbeName = "<name for custom health probe>"
$customDomainName = "<FQDN for custom domain associated with App Service>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add custom health probe using custom domain name:
Add-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw -Protocol Https -HostName $customDomainName -Path "/" -Interval 30 -Timeout 120 -UnhealthyThreshold 3
$probe = Get-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -Probe $probe -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
# Configure Application Gateway to connect to backend using default App Service hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -PickHostNameFromBackendAddress -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
Buka bagian "Pendengar" dan pilih "Tambahkan pendengar" atau klik yang sudah ada untuk mengedit
Untuk pendengar baru: beri nama
Di bagian "IP Frontend", pilih alamat IP untuk didengarkan
Di bagian "Port", pilih 443
Di bagian "Protokol", pilih "HTTPS"
Di bagian "Pilih sertifikat", pilih "Pilih sertifikat dari Key Vault". Untuk informasi selengkapnya, lihat Menggunakan Key Vault tempat Anda menemukan informasi selengkapnya tentang cara menetapkan identitas terkelola dan memberikannya hak atas Key Vault Anda.
Beri nama sertifikat
Pilih Identitas Terkelola
Pilih Key Vault dari mana mendapatkan sertifikat
Pilih sertifikat
Di bagian "Jenis Pendengar", pilih "Dasar"
Klik "Tambahkan" untuk menambahkan pendengar
Dengan asumsi tidak ada domain kustom yang tersedia atau sertifikat terkait, kami akan mengonfigurasi Application Gateway untuk mendengarkan lalu lintas HTTP pada port 80. Atau, lihat instruksi tentang cara Membuat sertifikat yang ditandatangani sendiri
Buka bagian "Pendengar" dan pilih "Tambahkan pendengar" atau klik yang sudah ada untuk mengedit
Untuk pendengar baru: beri nama
Di bagian "IP Frontend", pilih alamat IP untuk didengarkan
Di bagian "Port", pilih 80
Di bagian "Protokol", pilih "HTTP"
# This script assumes that:
# - a certificate was imported in Azure Key Vault already
# - a managed identity was assigned to Application Gateway with access to the certificate
# - there is no HTTP listener defined yet for HTTPS on port 443
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwSSLCertificateName = "<name for ssl cert to be created within Application Gateway"
$appGwSSLCertificateKeyVaultSecretId = "<key vault secret id for the SSL certificate to use>"
$httpListenerName = "<name for the listener to add>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Create SSL certificate object for Application Gateway:
Add-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw -KeyVaultSecretId $appGwSSLCertificateKeyVaultSecretId
$sslCert = Get-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw
# Fetch public ip associated with Application Gateway:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
$port = New-AzApplicationGatewayFrontendPort -Name "port_443" -Port 443
Add-AzApplicationGatewayFrontendPort -Name "port_443" -ApplicationGateway $gw -Port 443
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Https -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port -SslCertificate $sslCert
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
Dalam banyak kasus, pendengar publik untuk HTTP pada port 80 sudah ada. Skrip di bawah ini akan membuatnya jika belum terjadi.
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for the listener to add if not exists yet>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check if HTTP listener on port 80 already exists:
$port = $gw.FrontendPorts | Where-Object {$_.Port -eq 80}
$listener = $gw.HttpListeners | Where-Object {$_.Protocol.ToString().ToLower() -eq "http" -and $_.FrontendPort.Id -eq $port.Id}
if ($listener -eq $null){
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Http -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
}
Mengonfigurasi aturan perutean permintaan
Disediakan dengan Kumpulan Backend yang dikonfigurasi sebelumnya dan Pengaturan HTTP, aturan perutean permintaan dapat diatur untuk mengambil lalu lintas dari pendengar dan merutekannya ke Kumpulan Backend menggunakan Pengaturan HTTP. Untuk ini, pastikan Anda memiliki pendengar HTTP atau HTTPS yang tersedia yang belum terikat ke aturan perutean yang ada.
Buka bagian "Kesehatan backend" dan pastikan kolom "Status" menunjukkan kombinasi untuk Pengaturan HTTP dan Kumpulan Backend ditampilkan sebagai "Sehat".
Sekarang telusuri ke aplikasi web menggunakan Alamat IP Application Gateway atau nama DNS terkait untuk Alamat IP. Keduanya dapat ditemukan di halaman Application Gateway "Gambaran Umum" sebagai properti di bawah "Esensial". Atau sumber daya Alamat IP Publik juga menampilkan alamat IP dan nama DNS terkait.
Perhatikan daftar gejala potensial yang tidak lengkap berikut saat menguji aplikasi:
pengalihan yang menunjuk ke ".azurewebsites.net" secara langsung alih-alih Application Gateway
ini termasuk pengalihan autentikasi yang mencoba mengakses ".azurewebsites.net" secara langsung
cookie yang terikat domain tidak diteruskan ke backend
Kondisi di atas (dijelaskan secara lebih rinci di Pusat Arsitektur) akan menunjukkan bahwa aplikasi web Anda tidak berurusan dengan penulisan ulang nama host. Ini sangat umum untuk dilihat. Cara yang disarankan untuk menangani hal ini adalah dengan mengikuti instruksi untuk Application Gateway konfigurasi dengan App Service menggunakan domain kustom. Lihat juga: Memecahkan masalah App Service di Application Gateway.
Buka bagian "Kesehatan backend" dan pastikan kolom "Status" menunjukkan kombinasi untuk Pengaturan HTTP dan Kumpulan Backend ditampilkan sebagai "Sehat".
Sekarang telusuri ke aplikasi web menggunakan domain kustom yang Anda kaitkan dengan Application Gateway dan App Service di backend.
Periksa apakah kesehatan backend untuk backend dan Pengaturan HTTP ditampilkan sebagai "Sehat":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
Untuk menguji konfigurasi, kami akan meminta konten dari App Service melalui Application Gateway menggunakan domain kustom:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Periksa apakah kesehatan backend untuk backend dan Pengaturan HTTP ditampilkan sebagai "Sehat":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
Untuk menguji konfigurasi, kami akan meminta konten dari App Service melalui Application Gateway menggunakan alamat IP:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get ip address:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
Write-Host "Public ip address for Application Gateway is $($publicIp.IpAddress)"
Invoke-WebRequest "http://$($publicIp.IpAddress)"
Perhatikan daftar gejala potensial yang tidak lengkap berikut saat menguji aplikasi:
pengalihan yang menunjuk ke ".azurewebsites.net" secara langsung alih-alih Application Gateway
ini termasuk pengalihan Autentikasi App Service yang mencoba mengakses ".azurewebsites.net" secara langsung
cookie yang terikat domain tidak diteruskan ke backend
Kondisi di atas (dijelaskan secara lebih rinci di Pusat Arsitektur) akan menunjukkan bahwa aplikasi web Anda tidak berurusan dengan penulisan ulang nama host. Ini sangat umum untuk dilihat. Cara yang disarankan untuk menangani hal ini adalah dengan mengikuti instruksi untuk Application Gateway konfigurasi dengan App Service menggunakan domain kustom. Lihat juga: Memecahkan masalah App Service di Application Gateway.
Batasi akses
Aplikasi web yang disebarkan dalam contoh ini menggunakan alamat IP publik yang dapat diakses langsung dari Internet. Akses ini membantu Anda memecahkan masalah saat mempelajari fitur baru dan mencoba hal-hal baru. Namun, jika Anda berniat untuk menyebarkan fitur ke dalam produksi, Anda perlu menambahkan lebih banyak pembatasan. Pertimbangkan opsi berikut:
Gunakan pembatasan IP statis Azure App Service. Misalnya, Anda dapat membatasi aplikasi web agar hanya menerima lalu lintas dari gateway aplikasi. Gunakan fitur pembatasan IP layanan aplikasi untuk mencantumkan gateway aplikasi VIP sebagai satu-satunya alamat dengan akses.