server { listen 80; server_name _; # Use Docker's internal DNS with a short TTL so container IP changes # (e.g. after docker compose up -d for a single service) are picked up # without requiring an nginx reload. resolver 127.0.0.11 valid=10s; client_max_body_size 100M; location /api/ { set $api_upstream http://api_server:8080; rewrite ^/api/(.*)$ /$1 break; proxy_pass $api_upstream; 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_read_timeout 300s; proxy_connect_timeout 75s; proxy_buffering off; proxy_cache off; } location / { set $web_upstream http://web_server:3000; proxy_pass $web_upstream; 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_read_timeout 300s; proxy_connect_timeout 75s; } }