upstream plane { server localhost:80; } events { worker_connections 1024; } worker_processes 1; error_log /var/log/nginx/error.log; server_tokens off; access_log /var/log/nginx/access.log; http { sendfile on; upstream django { server planebackend:8000; } upstream react { server planefrontend:3000; } server { listen 80; root /www/data/; access_log /var/log/nginx/access.log; location / { proxy_pass http://planefrontend:3000/; proxy_set_header Host $host; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } location /api/ { proxy_pass http://planebackend:8000/api/; proxy_set_header Host $host; proxy_set_header Content-Type application/json; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }