Microsoft Azure Application Gateway V2 is designed to handle high traffic and provide a secure connection between clients and servers.
A 502 Bad Gateway error occurs when the Application Gateway V2 is unable to retrieve a response from the backend server.
This error can be caused by a variety of factors, including misconfigured backend pools or invalid SSL certificates.
To troubleshoot the issue, you can start by checking the Application Gateway V2 configuration and backend pool settings.
Make sure that the backend pool is correctly configured and that the servers are reachable from the Application Gateway V2.
Understanding 502 Bad Gateway
The 502 Bad Gateway error occurs when Azure Application Gateway can't connect to a backend server, often due to blocked incoming traffic.
A health probe response of "Cannot connect to backend server" indicates the issue is likely related to network security or firewall settings.
Port 8000 must be added to Network Security Group (NSG) inbound security rules, Load Balancer rules, and configured to listen on the correct port on the Application Gateway.
The VM is pingable but inaccessible from other devices on the same subnet, suggesting a firewall or network issue is blocking incoming traffic.
Firewalls, NSG, and UDR settings must be checked to ensure they're not blocking access to the server.
The 502 Bad Gateway error is a common issue when using Azure Application Gateway, but with the right troubleshooting steps, it can be resolved.
In the example provided, the issue was resolved by adding port 8000 to the NSG inbound security rule and Load Balancer rule, and configuring the Application Gateway to listen on the correct port.
Azure Application Gateway V2
Azure Application Gateway V2 is a powerful tool that helps you manage traffic to your web applications. It's a crucial component in ensuring the security and reliability of your online presence.
To better understand how Azure Application Gateway V2 works, let's take a look at the process of resolving a domain name. When a user enters a URL like https://s4hanatesting.eastus2.cloudapp.azure.com/sap/bc/ui2/flp in their browser, the domain name is resolved by a DNS server. Azure controls the DNS entry because all application gateways are in the azure.com domain.
The Azure DNS returns the IP address (52.252.28.162) to the client, which is the frontend Public IP address of the application gateway. This IP address is used to establish a connection with the application gateway.
A listener is a logical entity that checks for connection requests. It's configured with a Frontend IP address (52.252.28.162), protocol (HTTPS), and port number (443) for connections from clients to the application gateway. If a web application firewall (WAF) is in use, the application gateway checks the request headers and the body, if present, against WAF rules.
Here's a step-by-step overview of the request routing process:
- Request is received by the application gateway
- Request is evaluated by WAF rules
- Request is routed to the backend pool based on the listener configuration
- Request is sent to one of the healthy backend servers in the pool
- Request is processed by the backend server
The health of the server is determined by a health probe, and the application gateway uses a round-robin algorithm to route the requests between healthy servers. This load balances the requests on the servers, ensuring that no single server is overwhelmed with traffic.
Troubleshooting 502 Bad Gateway
Troubleshooting 502 Bad Gateway errors can be a real challenge, especially when working with Azure Application Gateway. The issue at hand is that the App GW can't connect to a backend Ubuntu VM when Azure VMSS is being used.
This problem can manifest as a "502 Bad Gateway" error when accessing the URL from a browser, despite the application responding with a 200 status code locally. The App GW health probe responds with "Cannot connect to backend server" and suggests checking NSG/UDR/Firewall for blocking access.
To troubleshoot this, it's essential to verify that the correct port is being used. In this case, the VM is listening on port 8000, and the NSG inbound security rule, Load balancer rule, and App GW are all configured to listen on this port.
However, even with these settings in place, the issue persists. The problem is that the incoming traffic is being blocked, causing the 502 bad gateway error. This can be a tricky issue to resolve, but it's worth exploring all possible causes, including network security groups and firewalls.
Application Configuration
To configure a custom error page for your Microsoft Azure Application Gateway, you can follow these steps. Navigate to Application Gateway in the portal, choose the required resource, and select Listeners to specify an error page for a particular listener. You can also use Azure PowerShell to configure a custom error page, such as a global custom error page or a listener level error page.
To determine which backend pool to route a request to, the application gateway evaluates the request routing rule associated with the listener. This action determines which backend pool to route the request to, such as the sleswd1 backend pool.
Application Gateway configuration options for WAF SKU v1 include a Basic SKU with dynamic IP assignment, while WAF SKU v2 supports a Standard SKU with static IP assignment. Here is a summary of the supported configurations:
Configuration Levels
Configuration levels play a crucial role in defining custom error pages for your application gateway.
You can set error pages at a Global or Listener level. The Global level applies error pages to all listeners, but its configuration through the Azure portal is currently not supported.
A Listener level gives you granular control to set error pages for applications served by that listener. This level is particularly useful when you need to override global configurations.
To use a combination of Global and Listener-level error pages, you must explicitly mention the URLs for all desired response codes for that listener. A listener-specific configuration overrides all preceding global configurations applicable to that listener.
Here are the configuration levels in more detail:
- Global level: Error pages set at a global level are applied to all listeners.
- Listener level: Error pages at a listener level give you granular control to set error pages for applications served by that listener.
Application Configuration
Application Configuration is a crucial aspect of setting up an Application Gateway. You can define custom error pages at a Global or Listener level, giving you granular control over error handling.
The Global level applies error pages to all listeners, while the Listener level allows you to specify error pages for a specific listener. If you're using a combination of both, you must explicitly mention the URLs for all desired response codes for that listener.
To configure listener-specific custom error pages, navigate to Application Gateway in the portal, select Listeners, and choose the listener for which you want to specify an error page. Under the Custom error pages section, specify publicly accessible URLs for the required status codes.
You can also use Azure PowerShell to configure custom error pages. For example, a global custom error page can be set using the Add-AzApplicationGatewayCustomError command, while a listener level error page can be set using the Add-AzApplicationGatewayHttpListenerCustomError command.
Application Gateway Configuration involves choosing the right settings for your application. You can configure the application gateway to be Public, Private, or Both. The WAF SKU v1 has different settings depending on whether you choose Public or Private, while the WAF SKU v2 has different settings depending on whether you choose Public, Private, or Both.
Here's a summary of the Application Gateway Configuration settings:
SAP System Pre-Requisites
To set up a secure SAP system, you need to configure SAP NetWeaver AS for ABAP to support TLS. This involves enabling Transport Layer Security (TLS) to ensure encrypted communication between the application and the server.
To ensure secure communication, configure SAP Web Dispatcher to support SSL (Secure Sockets Layer). This will encrypt data transmitted between the server and clients.
For SSL configuration, it's recommended to use a trusted Certificate Authority (CA) for internet-facing use cases. In our setup, we used a Private CA to sign all server and client certificates, including the Application Gateway certificate.
Here's a quick rundown of the pre-requisites for SAP systems:
- Configure SAP NetWeaver AS for ABAP to support TLS
- Configure SAP Web Dispatcher to support SSL
Note that Fiori applications with SSL setup (https) were already deployed prior to this setup.
Sources
- https://learn.microsoft.com/en-us/azure/application-gateway/custom-error
- https://learn.microsoft.com/en-us/answers/questions/1324357/502-bad-gateway
- https://learn.microsoft.com/en-us/answers/a/1283691
- https://community.sap.com/t5/technology-blogs-by-members/sap-on-azure-azure-application-gateway-web-application-firewall-waf-v2/ba-p/13473328
- https://stackoverflow.com/questions/77375551/502-bad-gateway-error-for-azure-application-gateway
Featured Images: pexels.com