default.conf 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # Dashboard service upstream (other upstreams are defined in nginx.conf)
  2. upstream dashboard_service {
  3. server dashboard:80;
  4. }
  5. server {
  6. listen 80;
  7. server_name localhost;
  8. # Security headers
  9. add_header X-Frame-Options DENY;
  10. add_header X-Content-Type-Options nosniff;
  11. add_header X-XSS-Protection "1; mode=block";
  12. add_header Referrer-Policy "strict-origin-when-cross-origin";
  13. # Authentication routes
  14. location /auth/ {
  15. proxy_pass http://auth_service;
  16. proxy_set_header Host $host;
  17. proxy_set_header X-Real-IP $remote_addr;
  18. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  19. proxy_set_header X-Forwarded-Proto $scheme;
  20. # Handle CORS preflight requests
  21. if ($request_method = 'OPTIONS') {
  22. add_header Access-Control-Allow-Origin * always;
  23. add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
  24. add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
  25. add_header Access-Control-Max-Age 86400 always;
  26. return 204;
  27. }
  28. # CORS headers for actual requests
  29. add_header Access-Control-Allow-Origin * always;
  30. add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
  31. add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
  32. }
  33. # API routes
  34. location /api/ {
  35. rewrite ^/api/(.*) /$1 break;
  36. proxy_pass http://api_service;
  37. proxy_set_header Host $host;
  38. proxy_set_header X-Real-IP $remote_addr;
  39. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  40. proxy_set_header X-Forwarded-Proto $scheme;
  41. # Handle CORS preflight requests
  42. if ($request_method = 'OPTIONS') {
  43. add_header Access-Control-Allow-Origin * always;
  44. add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
  45. add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
  46. add_header Access-Control-Max-Age 86400 always;
  47. return 204;
  48. }
  49. # CORS headers for actual requests
  50. add_header Access-Control-Allow-Origin * always;
  51. add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
  52. add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
  53. }
  54. # Health check
  55. location /health {
  56. access_log off;
  57. return 200 "healthy\n";
  58. add_header Content-Type text/plain;
  59. }
  60. # Static files and deployed apps
  61. location /apps/ {
  62. proxy_pass http://api_service;
  63. proxy_set_header Host $host;
  64. proxy_set_header X-Real-IP $remote_addr;
  65. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  66. proxy_set_header X-Forwarded-Proto $scheme;
  67. }
  68. # Storage routes (for file uploads/downloads)
  69. location /storage/ {
  70. client_max_body_size 100M;
  71. proxy_pass http://storage_service;
  72. proxy_set_header Host $host;
  73. proxy_set_header X-Real-IP $remote_addr;
  74. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  75. proxy_set_header X-Forwarded-Proto $scheme;
  76. }
  77. # WebSocket endpoint for real-time connections
  78. location /ws {
  79. proxy_pass http://realtime_service;
  80. proxy_http_version 1.1;
  81. # WebSocket upgrade headers
  82. proxy_set_header Upgrade $http_upgrade;
  83. proxy_set_header Connection "upgrade";
  84. # Standard proxy headers
  85. proxy_set_header Host $host;
  86. proxy_set_header X-Real-IP $remote_addr;
  87. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  88. proxy_set_header X-Forwarded-Proto $scheme;
  89. # WebSocket timeout settings (keep connections alive longer)
  90. proxy_read_timeout 86400s;
  91. proxy_send_timeout 86400s;
  92. proxy_connect_timeout 10s;
  93. # Disable buffering for WebSocket
  94. proxy_buffering off;
  95. # CORS headers for WebSocket
  96. add_header Access-Control-Allow-Origin * always;
  97. add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
  98. add_header Access-Control-Allow-Headers "Authorization, Content-Type, Upgrade, Connection, Sec-WebSocket-Key, Sec-WebSocket-Version, Sec-WebSocket-Protocol, Sec-WebSocket-Extensions" always;
  99. }
  100. # Default route - Dashboard (serve as main application)
  101. location / {
  102. proxy_pass http://dashboard_service;
  103. proxy_set_header Host $host;
  104. proxy_set_header X-Real-IP $remote_addr;
  105. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  106. proxy_set_header X-Forwarded-Proto $scheme;
  107. }
  108. }
  109. # Wildcard subdomain for hosted applications
  110. server {
  111. listen 80;
  112. server_name *.localhost;
  113. # Security headers
  114. add_header X-Frame-Options DENY;
  115. add_header X-Content-Type-Options nosniff;
  116. add_header X-XSS-Protection "1; mode=block";
  117. # Extract subdomain and route to corresponding app
  118. location / {
  119. proxy_pass http://api_service/apps/$host;
  120. proxy_set_header Host $host;
  121. proxy_set_header X-Real-IP $remote_addr;
  122. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  123. proxy_set_header X-Forwarded-Proto $scheme;
  124. }
  125. }