events {} http { upstream dotnet_app { server dotnet-1; server dotnet-2; } upstream java_app { server java-1; server java-2; } # Map the header to the chosen upstream map $http_x_app_type $app_upstream { dotnet dotnet_app; java java_app; default ""; } server { listen 80; root /usr/share/nginx/html; index index.html; # # 1) If header is present -> route here # location @proxy_handler { proxy_pass http://$app_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; } # # 2) Default location for all requests # location / { # If upstream selected -> jump to proxy handler error_page 418 = @proxy_handler; if ($app_upstream != "") { return 418; } # Otherwise serve index.html or static files try_files $uri $uri/ /index.html; } } }