events {} http { # Docker's built-in DNS. With the upstreams below held in variables, # nginx re-resolves the service names at request time instead of caching # the address from startup — so a recreated container (new IP) does not # leave nginx proxying to a stale address (502). resolver 127.0.0.11 valid=10s ipv6=off; # "Connection: upgrade" only for real upgrade requests, not every one. map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name _; # Api Requests location /api/ { set $api_upstream http://backend:5000; proxy_pass $api_upstream; 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; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } # Normal requests location / { set $frontend_upstream http://frontend:3000; proxy_pass $frontend_upstream; 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; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } }