All Case Studies
Architecture ยท Networking ยท Security
Azure Three-Tier Application Architecture
Production-Grade Secure Web App
RG: rg-multitier-autoscale-devRegion: Mexico CentralApp Gateway: agw-multitier-dev (Standard V2)Zones: 1 / 2 / 3Min Instances: 2Max Instances: 10
Overview
Designed and deployed a production-style three-tier web application on Azure โ React frontend, Node.js/Express backend, Azure SQL database. All inbound traffic routes through Azure Application Gateway with path-based routing. Network Security Groups enforce least-privilege access. No direct internet exposure to backend or database at any point.
Architecture Flow
๐
User / Internet
โก
Application Gateway v2
agw-multitier-dev ยท path-based routing
โ
/ โ Frontend App Service
React SPA
๐ง
/api/* โ Backend App Service
Node.js / Express
๐
Azure SQL Database
Port 1433 ยท backend-only access
NSG Rules
| Rule | Direction | Source | Port | Purpose |
|---|---|---|---|---|
| Allow-HTTP | Inbound | Internet | 80 | Public web access |
| Allow-HTTPS | Inbound | Internet | 443 | Secure access |
| Allow-Backend | Inbound | App GW | 443 | API communication |
| Allow-SQL | Outbound | Backend | 1433 | DB connectivity |
| Deny-All | Inbound | Any | Any | Default protection |
Auto-scaling Configuration
โบScale out: CPU > 70% for 5 min โ add instances
โบScale in: CPU < 30% for 10 min โ remove instances
โบMin: 2
โบMax: 10
Real Problem Solved
Challenge Solved
Fixed backend health probe failures by implementing a dedicated /api/health endpoint returning 200 OK โ resolved the missing health check that caused App Gateway to mark the backend pool as unhealthy.
Key Outcomes
โZero direct DB exposure โ backend-only SQL access
โAuto-scaling: 2โ10 instances, CPU threshold 70%
โ2/2 backend health probes returning 200 OK
Tech Stack
ReactNode.jsExpressAzure SQLApplication Gateway v2Azure App ServiceNSGApplication InsightsRBACVNet
Resource Details
Resource Grouprg-multitier-autoscale-dev
RegionMexico Central
App Gatewayagw-multitier-dev (Standard V2)
Zones1 / 2 / 3
Min Instances2
Max Instances10