What to do when I receive 502 error code on an Azure endpoint - HTTP Request failed. Error Code: 502.
From time to time we started to receive from Azure Web 502 HTTP error code during some load tests. In this post we will talk a little about what can be the root cause of this error and how we can manage it.
When you have an Azure WebApp (Azure WebSite) or an Azure Web Role this error is not returned by your application. This error is returned in most cases by Azure Load Balancer that plays the role of ARR (Application Request Routing).
When ARR doesn't receive a response from your application in 3 minutes (default timeout for Azure WebApp), a 502 error is returned. For ARR this means that the system is not in a good health, it could be even in a Pending state. The 3 minutes timeout period is specific for Azure Web App (Azure Web Sites)
Solutions
First think that you need to do is to look into your system and try to identify what part of the system is so slow or what trigger a crash into your system.
The second question that you should ask yourself is if is normal and acceptable from your side to have a request that takes more than 3 minutes.
How to change the default idle timeout
This configuration can be made at TCP level, changing the TCP timeout. In this moment this configuration is supported for VMs, Web Roles, Worker Roles and NOT for Azure Web Apps (Azure Web Sites). The maximum value that is acceptable is 30 minutes.
Based on your needs you can increase or decrease this value. Before doing this, at the first release of your system you should identify what is the best value for your system, based on your business use cases and client requirements.
Settings this value cannot be made directly in the portal. This configuration can be made from Powershell or .csdef file. For more information related to how you can configure it - https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/
An useful PowerShell command is Get-AzureEndpoint. This will retrieve all the configuration of the endpoint, including "IdleTimeoutInMinutes".
The takeaways of this post are:
HTTP client exception: HTTP Request failed. Error Code: 502.This error does not appears very often, but can be annoying. Especially because the root cause of this error cannot be traced easily.
When you have an Azure WebApp (Azure WebSite) or an Azure Web Role this error is not returned by your application. This error is returned in most cases by Azure Load Balancer that plays the role of ARR (Application Request Routing).
When ARR doesn't receive a response from your application in 3 minutes (default timeout for Azure WebApp), a 502 error is returned. For ARR this means that the system is not in a good health, it could be even in a Pending state. The 3 minutes timeout period is specific for Azure Web App (Azure Web Sites)
Solutions
First think that you need to do is to look into your system and try to identify what part of the system is so slow or what trigger a crash into your system.
The second question that you should ask yourself is if is normal and acceptable from your side to have a request that takes more than 3 minutes.
- If no, than you should try to see how you can optimize your system to reduce the timeout.
- If yes, than you need to change the configuration of Azure Load Balancer.
How to change the default idle timeout
This configuration can be made at TCP level, changing the TCP timeout. In this moment this configuration is supported for VMs, Web Roles, Worker Roles and NOT for Azure Web Apps (Azure Web Sites). The maximum value that is acceptable is 30 minutes.
Based on your needs you can increase or decrease this value. Before doing this, at the first release of your system you should identify what is the best value for your system, based on your business use cases and client requirements.
Settings this value cannot be made directly in the portal. This configuration can be made from Powershell or .csdef file. For more information related to how you can configure it - https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/
An useful PowerShell command is Get-AzureEndpoint. This will retrieve all the configuration of the endpoint, including "IdleTimeoutInMinutes".
Get-AzureVM –ServiceName “FooService” –Name “FooVM” | Get-AzureEndpoint
The takeaways of this post are:
- 502 is caused in general by a timeout
- The timeout can be configured at endpoint level
- The timeout cannot be configured
Comments
Post a Comment