Azure Application Gateway memungkinkan Anda memiliki aplikasi App Service atau layanan multipenyewa lainnya sebagai anggota kumpulan backend. Dalam artikel ini, Anda belajar mengonfigurasi aplikasi App Service dengan Application Gateway. Konfigurasi untuk Application Gateway berbeda tergantung pada bagaimana App Service dapat 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 ".azurewebsite.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 default ". Domain Azurewebsite".
Nama domain yang sama digunakan untuk Application Gateway dan App Service dalam kelompok backend, sehingga alur permintaan tidak perlu menggantikan nama host. Aplikasi web backend 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.
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 dari permintaan asli yang diterima oleh Application Gateway berbeda dari nama host pada App Service backend.
Di 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
- Mengonfigurasi Pendengar HTTP
- Mengonfigurasi Aturan Perutean Permintaan
Prasyarat
Mengonfigurasi DNS
Dalam konteks skenario ini, DNS relevan di dua tempat:
- Nama DNS, yang digunakan pengguna atau klien terhadap Application Gateway dan apa yang diperlihatkan di browser
- Nama DNS, yang digunakan Application Gateway secara internal untuk mengakses App Service di backend
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 tetap diarahkan ke Application Gateway.
Untuk menerima koneksi ke App Service melalui HTTPS, konfigurasikan pengikatan TLS-nya. Untuk informasi selengkapnya, lihat Mengamankan nama DNS kustom dengan pengikatan TLS/SSL di Azure App Service Mengonfigurasi App Service untuk menarik sertifikat untuk domain kustom dari Azure Key Vault.
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 adanya domain kustom yang tersedia menyiratkan bahwa tidak ada sertifikat yang ditandatangani secara publik 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
Di portal Azure, pilih Application Gateway Anda.
Pada Kumpulan ujung belakang,pilih salah satu kumpulan ujung belakang.
Pada Jenis target, pilih App Services.
Pada Target pilih App Service.
Catatan
Dropdown hanya menampilkan layanan aplikasi yang berada dalam langganan yang sama dengan Application Gateway 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. Jika Anda menggunakan titik akhir privat dengan App Service, Anda harus menggunakan FQDN atau alamat IP titik akhir privat sebagai gantinya.
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
Edit pengaturan HTTP untuk App Service
Pengaturan HTTP diperlukan yang menginstruksikan Application Gateway untuk mengakses backend App Service menggunakan nama domain kustom. Pengaturan HTTP secara default menggunakan pemeriksaan kesehatan default. Meskipun pemeriksaan kesehatan default meneruskan permintaan dengan nama host tempat lalu lintas diterima, pemeriksaan kesehatan dapat menggunakan 127.0.0.1 sebagai nama host ke Kolam Backend karena tidak ada nama host yang ditentukan secara eksplisit. Untuk alasan ini, kita perlu membuat pemeriksaan kesehatan kustom yang dikonfigurasi dengan nama domain kustom yang benar sebagai nama hostnya.
Kami 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
- Jika sertifikat ditandatangani oleh otoritas terkenal, pilih "Ya" untuk "Sertifikat CA pengguna yang terkenal." Atau Tambahkan sertifikat autentikasi/akar tepercaya dari server backend
- 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
- Jika sertifikat ditandatangani oleh otoritas terkenal, pilih "Ya" untuk "Sertifikat CA terkenal pengguna".
Atau Tambahkan sertifikat autentikasi/akar tepercaya dari server backend
- Pastikan untuk mengatur "Ganti dengan nama host baru" ke "Ya"
- Di bagian "Penimpaan nama host", pilih "Pilih nama host dari target backend". Pengaturan ini menyebabkan permintaan terhadap App Service menggunakan nama host "azurewebsites.net", sebagaimana dikonfigurasi di Backend Pool.
# 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
Untuk menerima lalu lintas, kita perlu mengonfigurasi Listener. Untuk informasi selengkapnya tentang Listener, lihat Konfigurasi Listener Application Gateway.
- Buka bagian "Pendengar" dan pilih "Tambahkan pendengar" atau pilih yang sudah ada untuk diedit
- 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"
- Pilih "Tambahkan" untuk menambahkan pendengar
Dengan asumsi tidak ada domain kustom yang tersedia atau sertifikat terkait, konfigurasikan 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 pilih yang sudah ada untuk diedit
- 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 ada. Skrip di bawah ini membuat satu objek jika belum ada.
$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
}
Kumpulan Backend yang telah dikonfigurasi sebelumnya dan Pengaturan HTTP menentukan bahwa aturan perutean permintaan dapat diatur untuk menerima lalu lintas dari listener dan mengarahkannya ke Kumpulan Backend dengan menggunakan Pengaturan HTTP. Untuk ini, pastikan Anda memiliki pendengar HTTP atau HTTPS yang tersedia yang belum terikat ke aturan perutean yang ada.
- Di bagian "Aturan", pilih untuk menambahkan "aturan perutean permintaan" baru
- Berikan aturan dengan nama
- Pilih pendengar HTTP atau HTTPS yang belum terikat ke aturan perutean yang ada
- Di bagian "Target backend", pilih Kumpulan Backend tempat App Service telah dikonfigurasi
- Mengonfigurasi pengaturan HTTP yang harus disambungkan oleh Application Gateway ke backend App Service
- Pilih "Tambahkan" untuk menyimpan konfigurasi ini
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for existing http listener (without rule) to route traffic from>"
$httpSettingsName = "<name for http settings to use>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to route to>"
$reqRoutingRuleName = "<name for request routing rule to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get HTTP Settings:
$httpListener = Get-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw
$httpSettings = Get-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw
$backendPool = Get-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw
# Add routing rule:
Add-AzApplicationGatewayRequestRoutingRule -Name $reqRoutingRuleName -ApplicationGateway $gw -RuleType Basic -BackendHttpSettings $httpSettings -HttpListener $httpListener -BackendAddressPool $backendPool
# Update Application Gateway with the new routing rule:
Set-AzApplicationGateway -ApplicationGateway $gw
Pengujian
Sebelum kita melakukannya, pastikan bahwa kesehatan backend menunjukkan sebagai sehat:
Buka bagian "Kondisi Backend" dan pastikan kolom "Status" menunjukkan bahwa kombinasi antara Pengaturan HTTP dan Kumpulan Backend ditampilkan sebagai "Berfungsi."
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 mengarah ke ".azurewebsite.net" secara langsung, alih-alih ke Application Gateway
- mencakup pengalihan autentikasi yang mencoba mengakses ".azurewebsite.net" secara langsung
- cookie terikat domain tidak diteruskan ke backend
- sertakan 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 "Kondisi Backend" dan pastikan kolom "Status" menunjukkan bahwa kombinasi antara Pengaturan HTTP dan Kumpulan Backend ditampilkan sebagai "Berfungsi."
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 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 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 kondisi 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. Tetapi jika Anda berniat untuk menyebarkan fitur ke dalam produksi, Anda ingin menambahkan lebih banyak batasan. 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.