Nginx Reverse Proxy for Microservices
February 13, 2026
|
Nginx
Reverse Proxy
Microservices
Path-based routing and WebSocket proxying.
Nginx as a Reverse Proxy for Microservices
Nginx excels as a reverse proxy that routes traffic to multiple backend microservices based on URL path, hostname, or headers. It handles SSL termination, compression, caching, and WebSocket proxying — all with minimal latency overhead.
Path-Based Routing
upstream api_service {
server 10.0.1.10:3000;
server 10.0.1.11:3000;
}
upstream auth_service {
server 10.0.2.10:4000;
server 10.0.2.11:4000;
}
upstream frontend {
server 10.0.3.10:8080;
}
server {
listen 443 ssl http2;
server_name app.example.com;
ssl_certificate /etc/nginx/ssl/app.crt;
ssl_certificate_key /etc/nginx/ssl/app.key;
# API routes
location /api/ {
proxy_pass http://api_service/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Auth service
location /auth/ {
proxy_pass http://auth_service/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# WebSocket support
location /ws/ {
proxy_pass http://api_service;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
# Frontend (default)
location / {
proxy_pass http://frontend;
proxy_set_header Host $host;
}
}
Health Check Configuration
upstream api_service {
server 10.0.1.10:3000 max_fails=3 fail_timeout=30s;
server 10.0.1.11:3000 max_fails=3 fail_timeout=30s;
server 10.0.1.12:3000 backup; # Used only when primary servers are down
}
Performance Tuning
# Enable compression
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000;
# Connection keep-alive to backends
upstream api_service {
server 10.0.1.10:3000;
keepalive 32; # Keep 32 connections open to backend
}
location /api/ {
proxy_pass http://api_service/;
proxy_http_version 1.1;
proxy_set_header Connection ""; # Required for keepalive
}
Eazy SaaS Tip: Always set
proxy_set_header X-Real-IPandX-Forwarded-For. Without these, your backend services see Nginx's IP instead of the client's real IP — breaking logging, rate limiting, and geo-location.