events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; upstream django { server django:8701; } upstream fastapi { server fastapi:8702; } upstream timeline { server timeline:5173; } server { listen 80; server_name mpr.local.ar; # Django Admin location /admin { proxy_pass http://django; 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; } # Django static files location /static { proxy_pass http://django; proxy_set_header Host $host; } # FastAPI location /api/ { proxy_pass http://fastapi; 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; } # Timeline UI location /ui { proxy_pass http://timeline; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } # Vite HMR websocket location /@vite { proxy_pass http://timeline; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } # Media files - input (source) location /media/in { alias /app/media/in; autoindex on; } # Media files - output (transcoded) location /media/out { alias /app/media/out; autoindex on; } # Default to Timeline UI location / { proxy_pass http://timeline; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } }