Files
ROLAC/deploy/vm/nginx/conf.d/rolac.conf
T
Chris Chen bd722933dc
ci-cd-vm / ci-cd (push) Successful in 46s
Update rolac.conf
2026-06-23 16:10:14 -07:00

60 lines
2.4 KiB
Plaintext

# SignalR/WebSocket: when the client sends "Upgrade: websocket" we must forward
# "Connection: upgrade"; on ordinary requests (negotiate POST, long-polling) the
# Upgrade header is empty and we send "Connection: close" instead. A conf.d file
# is included inside the http{} context, so this top-level map is valid here.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name _;
# Docker's embedded DNS. Using a variable for the upstream below forces nginx
# to re-resolve via this resolver instead of caching the container IP at
# startup — so api/app can be recreated (new IPs on redeploy) without nginx
# holding a stale IP and returning 502.
resolver 127.0.0.11 valid=10s ipv6=off;
# API -> api container. The SPA calls same-origin /api/... (environment.prod.ts).
location /api/ {
# nginx defaults to 1 MB, which 413s phone-camera receipt uploads before they
# reach the API. Keep this >= the largest API [RequestSizeLimit] (offerings = 50 MB)
# so the per-endpoint limits in the controllers stay the real authority.
client_max_body_size 50m;
set $upstream_api api;
proxy_pass http://$upstream_api:8080$request_uri;
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;
}
# SignalR hubs -> api container. Must be proxied to Kestrel like /api/; without
# this block /hubs/* fell through to "location /" (the static app), whose nginx
# 405s the negotiate POST so the connection never reaches the backend. The
# Upgrade/Connection headers + http_version 1.1 let the WebSocket transport
# establish instead of degrading to long-polling.
location /hubs/ {
set $upstream_api api;
proxy_pass http://$upstream_api:8080$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $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_buffering off;
proxy_read_timeout 100s;
}
# Everything else -> the Angular static app (its own nginx does SPA fallback).
location / {
set $upstream_app app;
proxy_pass http://$upstream_app:80;
}
}