Mengonfigurasi Application Gateway dengan App Service
Artikel
Gateway aplikasi memungkinkan Anda memiliki aplikasi App Service atau layanan multi-penyewa lainnya sebagai anggota kumpulan backend. 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 di Application Gateway dan App Service di backend.
Opsi kedua adalah meminta App Service akses Application Gateway 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 ke 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 penyiapan 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: Pertahankan 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, diakhiri 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 untuk koneksi ke 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 di Key Vault. Untuk informasi selengkapnya tentang cara menyimpan sertifikat di Key Vault, lihat Tutorial: Mengimpor sertifikat di Azure Key Vault
Rutekan pengguna atau klien ke 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 ada ke Azure App Service Untuk memverifikasi domain, App Service hanya memerlukan penambahan catatan TXT. Tidak ada perubahan yang diperlukan pada CNAME atau catatan A. Konfigurasi DNS untuk domain kustom akan tetap diarahkan ke Application Gateway.
Ketika 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 di mana 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. Meskipun pemeriksaan kesehatan default akan meneruskan permintaan dengan nama host tempat lalu lintas diterima, pemeriksaan kesehatan akan menggunakan 127.0.0.1 sebagai nama host ke Kumpulan Backend karena tidak ada nama host yang secara eksplisit didefinisikan. Untuk alasan ini, kita perlu membuat pemeriksaan kesehatan kustom yang dikonfigurasi dengan nama domain kustom yang benar sebagai nama hostnya.
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".
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 menimpa 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
Mengonfigurasi pendengar HTTP
Untuk menerima lalu lintas, kita perlu mengonfigurasi Listener. Untuk informasi selengkapnya tentang ini, lihat Konfigurasi pendengar Application Gateway.
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 yang akan 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 tempat 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 yang akan 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
Menggunakan 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 "Gambaran Umum" Application Gateway 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 menunjuk ke ".azurewebsites.net" secara langsung alih-alih ke Application Gateway
ini termasuk pengalihan autentikasi yang mencoba mengakses ".azurewebsites.net" secara langsung
cookie terikat domain tidak diteruskan ke backend
ini termasuk penggunaan pengaturan "afinitas ARR" di App Service
Kondisi di atas (dijelaskan secara lebih rinci di Pusat Arsitektur) akan menunjukkan bahwa aplikasi web Anda tidak berurusan dengan baik dengan penulisan ulang nama host. Ini umumnya terlihat. Cara yang disarankan untuk menangani hal ini adalah dengan mengikuti instruksi untuk konfigurasi Application Gateway 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 http Pengaturan 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 http Pengaturan 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 menunjuk ke ".azurewebsites.net" secara langsung alih-alih ke Application Gateway
ini termasuk pengalihan Autentikasi App Service yang mencoba mengakses ".azurewebsites.net" secara langsung
cookie terikat domain tidak diteruskan ke backend
ini termasuk penggunaan pengaturan "afinitas ARR" di App Service
Kondisi di atas (dijelaskan secara lebih rinci di Pusat Arsitektur) akan menunjukkan bahwa aplikasi web Anda tidak berurusan dengan baik dengan penulisan ulang nama host. Ini umumnya terlihat. Cara yang disarankan untuk menangani hal ini adalah dengan mengikuti instruksi untuk konfigurasi Application Gateway dengan App Service menggunakan domain kustom. Lihat juga: Memecahkan masalah App Service di Application Gateway.
Membatasi akses
Aplikasi web yang disebar di contoh ini menggunakan alamat IP publik yang dapat diakses langsung dari Internet. Ini membantu pemecahan masalah saat Anda 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:
Mengonfigurasi aturan pembatasan akses berdasarkan titik akhir layanan. Ini memungkinkan Anda mengunci akses masuk ke aplikasi untuk memastikan alamat sumber berasal dari Application Gateway.
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.