Setting Up Nginx as a Reverse Proxy
A reverse proxy forwards incoming requests to a backend application running on a different port. This lets you run multiple apps on one server behind a single domain, and add SSL without modifying the app.
Basic Reverse Proxy Config
nano /etc/nginx/sites-available/myapp
server {
listen 80;
server_name myapp.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
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;
}
}
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Add SSL with Certbot
certbot --nginx -d myapp.yourdomain.com
WebSocket Proxy Support
For apps using WebSockets (Node.js, chat apps, etc.), add:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Proxy Multiple Apps
Create a separate config file for each app/domain:
# /etc/nginx/sites-available/app1 -> localhost:3000
# /etc/nginx/sites-available/app2 -> localhost:4000
# /etc/nginx/sites-available/app3 -> localhost:5000
Tune Timeouts for Slow Backends
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;