Skip to main content

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.
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

Popular posts from this blog

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

Fundamental Books of a Software Engineer (version 2018)

More then six years ago I wrote a blog post about fundamental books that any software engineer (developer) should read. Now it is an excellent time to update this list with new entries.

There are 5 different categories of books, that represent the recommended path. For example, you start with Coding books, after that, you read books about Programming, Design and so on.
There are some books about C++ that I recommend not because you shall know C++, only because the concepts that you can learn from it.

Coding

Writing solid codeCode completeProgramming Pearls, more programming pearls(recommended)[NEW] Introduction to Algorithms

Programming

Refactoring (M. Fowler)Pragmatic ProgrammerClean code[NEW] Software Engineering: A Practitioner's Approach[NEW] The Mythical Man-Month[NEW] The Art of Computer Programming

Design

Applying UML and Patterns (GRASP patterns)C++ coding standards (Sutter, Alexandrescu)The C++ programming language (Stroustrup, Part IV)Object-oriented programming (Peter Coad)P…

Entity Framework (EF) TransactionScope vs Database.BeginTransaction

In today blog post we will talk a little about a new feature that is available on EF6+ related to Transactions.
Until now, when we had to use transaction we used ‘TransactionScope’. It works great and I would say that is something that is now in our blood.
using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (SqlConnection conn = new SqlConnection("...")) { conn.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = ... sqlCommand.ExecuteNonQuery(); ... } scope.Complete(); } Starting with EF6.0 we have a new way to work with transactions. The new approach is based on Database.BeginTransaction(), Database.Rollback(), Database.Commit(). Yes, no more TransactionScope.
In the followi…