# HTTP only — local dev and IP-based staging (no TLS). # Use with: docker compose and map host port e.g. 8080:80 or 8088:80 # # Dynamic proxy_pass via Docker DNS (127.0.0.11) so nginx starts even if # backend/frontend containers are not up yet (static upstream blocks fail at boot). resolver 127.0.0.11 valid=10s ipv6=off; server { listen 80; listen [::]:80; server_name _; client_max_body_size 50M; location / { set $frontend_upstream http://frontend:3000; proxy_pass $frontend_upstream; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; 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; proxy_cache_bypass $http_upgrade; proxy_read_timeout 300; proxy_connect_timeout 300; } location /api { set $backend_upstream http://backend:3000; proxy_pass $backend_upstream; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; 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; proxy_cache_bypass $http_upgrade; proxy_read_timeout 300; proxy_connect_timeout 300; } location /health { access_log off; return 200 "healthy\n"; add_header Content-Type text/plain; } }