Skip to content

Commit 4c889ce

Browse files
authored
Merge pull request #312109 from riturajc/riturajc/appgw-pace-updates-feb2026
Application Gateway and WAF documentation improvements (7 PACE items)
2 parents c053276 + 07dd5fd commit 4c889ce

9 files changed

Lines changed: 34 additions & 16 deletions

articles/application-gateway/application-gateway-autoscaling-zone-redundant.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ However, it’s important to note that provisioning a new instance may take appr
3535

3636
For scale-in events, Application Gateway drains existing connections for 5 minutes on the instance that is subject for removal. After 5 minutes, existing connections are closed and the instance removed. Any new connections during or after the 5 minute scale-in time is established to other existing instances on the same gateway.
3737

38+
> [!NOTE]
39+
> During autoscaling events, brief dips in availability metrics may be observed. This behavior is expected during scaling transitions and typically resolves within seconds.
40+
3841
## Next steps
3942

4043
- Learn more about zone redundancy in [Reliability for Application Gateway v2](/azure/reliability/reliability-application-gateway-v2)
4144
- Learn how to [Schedule autoscaling for Application Gateway](application-gateway-externally-managed-scheduled-autoscaling.md)
4245
- Learn more about [Application Gateway v2](overview-v2.md)
4346
- [Create an autoscaling, zone redundant application gateway with a reserved virtual IP address using Azure PowerShell](tutorial-autoscale-ps.md)
44-

articles/application-gateway/application-gateway-components.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ A backend pool routes request to backend servers, which serve the request. Backe
131131
- Public IP addresses
132132
- Internal IP addresses
133133
- FQDN (fully qualified domain names) or short names (single-label domain names), provided your DNS server can resolve them
134-
- Multitenant backends (such as App Service)
134+
- Multitenant backends such as Azure App Service and Azure Container Apps. See [Protect Container Apps with Application Gateway and WAF](../container-apps/waf-app-gateway.md) for implementation guidance.
135135

136136
Application Gateway backend pool members aren't tied to an availability set. An application gateway can communicate with instances outside of the virtual network that it's in. As a result, the members of the backend pools can be across clusters, across datacenters, or outside Azure, as long as there's IP connectivity.
137137

articles/application-gateway/application-gateway-probe-overview.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ The following table provides definitions for the properties of a custom health p
8282
| Interval |Probe interval in seconds. This value is the time interval between two consecutive probes |
8383
| Time-out |Probe time-out in seconds. If a valid response isn't received within this time-out period, the probe is marked as failed |
8484
| Unhealthy threshold |Probe retry count. The backend server is marked down after the consecutive probe failure count reaches the unhealthy threshold |
85+
| MinServers |Minimum number of servers that are always marked healthy. Default value is 0, which means health probe results determine the health status of all backend servers. When set to a value greater than 0, the specified number of servers are always marked as healthy regardless of probe results. This property is only configurable via PowerShell, Azure CLI, or ARM templates (not available in Azure portal).|
86+
87+
> [!WARNING]
88+
> Use the **MinServers** parameter with caution. When MinServers is set to a value greater than 0, Application Gateway always marks that minimum number of backend servers as healthy, even if their health probes are failing. This can result in traffic being sent to unhealthy servers, potentially causing 502 Bad Gateway errors or other connectivity issues for clients. Only configure MinServers if you have specific availability requirements and understand the implications of overriding health probe results.
8589
8690
### Probe matching
8791

articles/application-gateway/application-gateway-secure-flag-session-affinity.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ In this guide you learn to create a Rewrite set for your Application Gateway and
1919
* You must have an Azure subscription. You can create a [free account](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn) before you begin.
2020
* An existing Application Gateway resource configured with at least one Listener, Rule, Backend Setting and Backend Pool configuration. If you don't have one, you can create one by following the [QuickStart guide](quick-create-portal.md).
2121

22+
> [!IMPORTANT]
23+
> If your backend application returns multiple Set-Cookie headers (for example, application cookies in addition to the ApplicationGatewayCookie), the simple pattern matching approach shown in this article will apply the rewrite to all Set-Cookie headers. To target only the ApplicationGatewayCookie specifically, use the HeaderValueMatcher pattern matching feature. For more information, see [Pattern matching for Set-Cookie headers](rewrite-http-headers-url.md#pattern-matching).
24+
2225
## Creating a Rewrite set
2326

2427
1. Sign in to the Azure portal.
@@ -41,6 +44,8 @@ In this guide you learn to create a Rewrite set for your Application Gateway and
4144
1. Case-sensitive - No
4245
1. Operator - equal (=)
4346
1. Pattern to match - (.*)
47+
> [!NOTE]
48+
> This pattern `(.*)` matches all Set-Cookie headers. If you need to target only the ApplicationGatewayCookie and preserve other Set-Cookie headers, see [Pattern matching for Set-Cookie headers](rewrite-http-headers-url.md#pattern-matching) to use the HeaderValueMatcher feature.
4449
1. To save these details, select **OK**.
4550
1. Go to the **Then** box to specify action details.
4651
1. Rewrite type - Response header
@@ -53,4 +58,5 @@ In this guide you learn to create a Rewrite set for your Application Gateway and
5358

5459

5560
## Next steps
56-
[Visit other configurations of a Backend Setting](configuration-http-settings.md)
61+
- [Visit other configurations of a Backend Setting](configuration-http-settings.md)
62+
- [Learn about pattern matching for Set-Cookie headers](rewrite-http-headers-url.md#pattern-matching)

articles/application-gateway/configuration-listeners.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ Set-AzApplicationGateway -ApplicationGateway $gw
9595
> When creating an application gateway resource through the Azure portal, the default option for **HTTP2** is set as enabled. You can choose **Disabled** during creation, and re-enabled HTTP2 support using the Azure portal by selecting **Enabled** under **HTTP2** in **Application gateway > Configuration**.
9696
>
9797
> In instances where HTTP2 isn't supported by a client, HTTP1.1 will be used. Enabling HTTP2 doesn't disable HTTP1.1; it allows support for both.
98-
>
98+
99+
> [!NOTE]
100+
> Application Gateway only supports HTTP/2 over TLS (HTTPS listeners). HTTP/2 Cleartext (h2c) protocol upgrade attempts from HTTP/1.1 are not supported and will result in a 403 Forbidden error. Clients attempting h2c upgrades should use native HTTP/2 connections over HTTPS or remain on HTTP/1.1.
99101
100102
### WebSocket support
101103

articles/application-gateway/http-response-codes.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,16 @@ HTTP 400 response codes are commonly observed when:
5555
Some common reasons for the request to be non-compliant to RFC are:
5656

5757
| Category | Examples |
58-
| ---------- | ---------- |
59-
| Invalid Host in request line | Host containing two colons (example.com:**8090:8080**) |
58+
| ---------- | ---------- |
59+
| Invalid Host in request line | Host containing two colons (example.com:**8090:8080**) |
6060
| Missing Host Header | Request doesn't have Host Header |
6161
| Presence of malformed or illegal character | Reserved characters are **&,!.** The workaround is to code it as a percentage. For example: %& |
6262
| Invalid HTTP version | Get /content.css HTTP/**0.3** |
63-
| Header field name and URI contain non-ASCII Character | GET /**«úü¡»¿**.doc HTTP/1.1 |
63+
| Header field name and URI contain non-ASCII Character | GET /**«úü¡»¿**.doc HTTP/1.1 |
6464
| Missing Content Length header for POST request | Self Explanatory |
6565
| Invalid HTTP Method | **GET123** /index.html HTTP/1.1 |
6666
| Duplicate Headers | Authorization:\<base64 encoded content\>, Authorization: \<base64 encoded content\> |
67-
| Invalid value in Content-Length | Content-Length: **abc**,Content-Length: **-10**|
67+
| Invalid value in Content-Length | Content-Length: **abc**,Content-Length: **-10** |
6868

6969
For cases when mutual authentication is configured, several scenarios can lead to an HTTP 400 response being returned the client, such as:
7070
- Mutual authentication is enabled but the Client certificate wasn't presented.
@@ -93,6 +93,7 @@ An HTTP 401 unauthorized response can be returned to AppGW probe request if the
9393
HTTP 403 Forbidden is presented when customers are utilizing WAF (Web Application Firewall) skus and have WAF configured in Prevention mode. If enabled WAF rulesets or custom deny WAF rules match the characteristics of an inbound request, the client is presented a 403 forbidden response.
9494

9595
Other reasons for clients receiving 403 responses include:
96+
- **h2c protocol upgrade attempts**: Application Gateway returns 403 errors when clients attempt to upgrade from HTTP/1.1 to HTTP/2.0 using the h2c protocol (HTTP/2 Cleartext). Application Gateway only supports HTTP/2 over TLS (HTTPS listeners); h2c protocol upgrades over HTTP listeners are not supported. This behavior occurs regardless of WAF mode. Clients should use native HTTP/2 connections over HTTPS or remain on HTTP/1.1 without upgrade attempts.
9697
- You're using App Service as backend and it's configured to allow access only from Application Gateway. This can return a 403 error by App Services. This typically happens due to redirects/href links that point directly to App Services instead of pointing at the Application Gateway's IP address.
9798
- If you're accessing a storage blog and the Application Gateway and storage endpoint is in different region, then a 403 error is returned if the Application Gateway's public IP address isn't allow-listed. See [Grant access from an internet IP range](/azure/storage/common/storage-network-security?tabs=azure-portal#grant-access-from-an-internet-ip-range).
9899

articles/application-gateway/key-vault-certs.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ Define access policies to use the user-assigned managed identity with your Key V
7777
3. If you're using the permission model **Vault access policy**: Select **Access Policies**, select **+ Add Access Policy**, select **Get** for **Secret permissions**, and choose your user-assigned managed identity for **Select principal**. Then select **Save**.
7878

7979
If you're using **Azure role-based access control** follow the article [Assign a managed identity access to a resource](/entra/identity/managed-identities-azure-resources/how-to-assign-access-azure-resource) and assign the user-assigned managed identity the **Key Vault Secrets User** role to the Azure Key Vault.
80-
80+
> [!NOTE]
81+
> When using Azure RBAC with Key Vault, if you're configuring the Application Gateway integration using PowerShell, Azure CLI, or REST API (for example, using `Get-AzKeyVaultSecret` or `az keyvault secret show`), the **user or service principal** performing these operations also needs the **Key Vault Secrets User** role (or equivalent permissions) on the Key Vault. This is because these management operations run in your security context, not the Application Gateway's managed identity context. The managed identity is used by Application Gateway at runtime to retrieve certificates.
8182
### Verify Firewall Permissions to Key Vault
8283

8384
As of March 15, 2021, Key Vault recognizes Application Gateway as a trusted service by leveraging User Managed Identities for authentication to Azure Key Vault. With the use of service endpoints and enabling the trusted services option for Key Vault's firewall, you can build a secure network boundary in Azure. You can deny access to traffic from all networks (including internet traffic) to Key Vault but still make Key Vault accessible for an Application Gateway resource under your subscription.

articles/application-gateway/toc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@
209209
href: ingress-controller-expose-websocket-server.md
210210
- name: Autoscale AKS pods with Application Gateway metrics
211211
href: ingress-controller-autoscale-pods.md
212+
- name: Integration with Container Apps
213+
href: ../container-apps/waf-app-gateway.md?toc=/azure/application-gateway/toc.json&bc=/azure/application-gateway/breadcrumb/toc.json
212214
- name: Route by URL
213215
items:
214216
- name: Azure PowerShell

articles/web-application-firewall/ag/upgrade-ruleset-version.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ When upgrading your Azure WAF ruleset version, make sure to:
5353
-Name $wafPolicyName `
5454
-ResourceGroupName $resourceGroupName
5555
$currentExclusions = $wafPolicy.ManagedRules.Exclusions
56-
$currentManagedRuleset = $wafPolicy.ManagedRules.ManagedRuleSets
57-
| Where-Object { $_.RuleSetType -eq "OWASP" }
56+
$currentManagedRuleset = $wafPolicy.ManagedRules.ManagedRuleSets | Where-Object { $_.RuleSetType -eq "OWASP" }
5857
$currentVersion = $currentManagedRuleset.RuleSetVersion
5958
```
6059
@@ -121,14 +120,15 @@ groups:
121120
foreach ($existingRule in $group.Rules) {
122121
if (-not (Test-RuleIsRemovedFromDRS21 $existingRule.RuleId $currentVersion))
123122
{
124-
`$existingGroup = $groupOverrides |
125-
Where-Object { $_.RuleGroupName -eq $mappedGroupName }
123+
$existingGroup = $groupOverrides | Where-Object { $_.RuleGroupName -eq $mappedGroupName }
126124
if ($existingGroup) {
127-
if (-not ($existingGroup.Rules |
128-
Where-Object { $_.RuleId -eq $existingRule.RuleId })) {
125+
if (-not ($existingGroup.Rules | Where-Object { $_.RuleId -eq $existingRule.RuleId })) {
129126
$existingGroup.Rules.Add($existingRule) } }
130127
else {
131-
$newGroup = New-AzApplicationGatewayFirewallPolicyManagedRuleGroupOverride ` -RuleGroupName $mappedGroupName ` -Rule @($existingRule) $groupOverrides += $newGroup } } } }
128+
$newGroup = New-AzApplicationGatewayFirewallPolicyManagedRuleGroupOverride `
129+
-RuleGroupName $mappedGroupName `
130+
-Rule @($existingRule)
131+
$groupOverrides += $newGroup } } } }
132132
133133
```
134134

0 commit comments

Comments
 (0)