default.conf 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. # Include dynamic application proxy configurations
  61. include /etc/nginx/conf.d/apps-proxy.conf;
  62. # Storage routes (for file uploads/downloads)
  63. location /storage/ {
  64. client_max_body_size 100M;
  65. proxy_pass http://storage_service;
  66. proxy_set_header Host $host;
  67. proxy_set_header X-Real-IP $remote_addr;
  68. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  69. proxy_set_header X-Forwarded-Proto $scheme;
  70. }
  71. # WebSocket endpoint for real-time connections
  72. location /ws {
  73. proxy_pass http://realtime_service;
  74. proxy_http_version 1.1;
  75. # WebSocket upgrade headers
  76. proxy_set_header Upgrade $http_upgrade;
  77. proxy_set_header Connection "upgrade";
  78. # Standard proxy headers
  79. proxy_set_header Host $host;
  80. proxy_set_header X-Real-IP $remote_addr;
  81. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  82. proxy_set_header X-Forwarded-Proto $scheme;
  83. # WebSocket timeout settings (keep connections alive longer)
  84. proxy_read_timeout 86400s;
  85. proxy_send_timeout 86400s;
  86. proxy_connect_timeout 10s;
  87. # Disable buffering for WebSocket
  88. proxy_buffering off;
  89. # CORS headers for WebSocket
  90. add_header Access-Control-Allow-Origin * always;
  91. add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
  92. add_header Access-Control-Allow-Headers "Authorization, Content-Type, Upgrade, Connection, Sec-WebSocket-Key, Sec-WebSocket-Version, Sec-WebSocket-Protocol, Sec-WebSocket-Extensions" always;
  93. }
  94. # Default route - Dashboard (serve as main application)
  95. location / {
  96. proxy_pass http://dashboard_service;
  97. proxy_set_header Host $host;
  98. proxy_set_header X-Real-IP $remote_addr;
  99. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  100. proxy_set_header X-Forwarded-Proto $scheme;
  101. }
  102. }
  103. # Wildcard subdomain for hosted applications
  104. server {
  105. listen 80;
  106. server_name *.localhost;
  107. # Security headers
  108. add_header X-Frame-Options DENY;
  109. add_header X-Content-Type-Options nosniff;
  110. add_header X-XSS-Protection "1; mode=block";
  111. # Extract subdomain and route to corresponding app
  112. location / {
  113. proxy_pass http://api_service/apps/$host;
  114. proxy_set_header Host $host;
  115. proxy_set_header X-Real-IP $remote_addr;
  116. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  117. proxy_set_header X-Forwarded-Proto $scheme;
  118. }
  119. }