# ============================================================================= # PROJECT N.O.M.A.D. — Homelab Edition # Nginx Reverse Proxy Configuration # ============================================================================= upstream nomad_app { server nomad-app:8080; keepalive 32; } server { listen 80; server_name _; # Security headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; # Logging access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # Client body size (for file uploads) client_max_body_size 10G; # Timeouts for large file operations proxy_read_timeout 600s; proxy_send_timeout 600s; proxy_connect_timeout 60s; # Health check endpoint (bypasses proxy for fast response) location /nginx-health { access_log off; return 200 "healthy\n"; add_header Content-Type text/plain; } # WebSocket support for Transmit (real-time updates) location /__transmit { proxy_pass http://nomad_app; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header 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_read_timeout 86400s; } # Main application location / { proxy_pass http://nomad_app; 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 X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; # Buffer settings for large responses proxy_buffering on; proxy_buffer_size 16k; proxy_buffers 8 32k; } # Static assets caching location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { proxy_pass http://nomad_app; proxy_set_header Host $host; expires 7d; add_header Cache-Control "public, immutable"; } }