keycloak 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. upstream keycloak_upstream {
  2. server 172.18.0.3:8080;
  3. }
  4. server {
  5. listen 80;
  6. server_name auth.mrx8086.com;
  7. # Redirect HTTP to HTTPS
  8. return 301 https://$host$request_uri;
  9. }
  10. server {
  11. listen 443 ssl;
  12. server_name auth.mrx8086.com;
  13. # SSL Configuration
  14. ssl_certificate /etc/nginx/ssl/mrx8086.com/fullchain.pem;
  15. ssl_certificate_key /etc/nginx/ssl/mrx8086.com/privkey.pem;
  16. ssl_session_timeout 1d;
  17. ssl_session_tickets off;
  18. # Modern SSL configuration
  19. ssl_protocols TLSv1.2 TLSv1.3;
  20. ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  21. ssl_prefer_server_ciphers off;
  22. # Security headers
  23. add_header X-Content-Type-Options nosniff always;
  24. add_header X-XSS-Protection "1; mode=block" always;
  25. add_header X-Frame-Options SAMEORIGIN always;
  26. add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  27. # Content Security Policy
  28. add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; frame-src 'self'; frame-ancestors 'self'; connect-src 'self'" always;
  29. # Proxy settings for all locations
  30. proxy_set_header X-Real-IP $remote_addr;
  31. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  32. proxy_set_header X-Forwarded-Proto $scheme;
  33. proxy_set_header X-Forwarded-Host $host;
  34. proxy_set_header X-Forwarded-Port 443;
  35. proxy_set_header Host $host;
  36. proxy_http_version 1.1;
  37. # Root location for the main application
  38. location / {
  39. proxy_pass http://keycloak_upstream;
  40. }
  41. # Keycloak required paths
  42. location /realms/ {
  43. proxy_pass http://keycloak_upstream;
  44. proxy_buffer_size 128k;
  45. proxy_buffers 4 256k;
  46. proxy_busy_buffers_size 256k;
  47. # WebSocket support
  48. proxy_set_header Upgrade $http_upgrade;
  49. proxy_set_header Connection "upgrade";
  50. # Timeouts
  51. proxy_connect_timeout 60s;
  52. proxy_send_timeout 60s;
  53. proxy_read_timeout 60s;
  54. }
  55. location /resources/ {
  56. proxy_pass http://keycloak_upstream;
  57. # Cache settings for static resources
  58. proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
  59. proxy_cache_valid 200 1d;
  60. expires 1d;
  61. add_header Cache-Control "public" always;
  62. }
  63. location /robots.txt {
  64. proxy_pass http://keycloak_upstream;
  65. }
  66. # Block sensitive paths
  67. location /admin/ {
  68. allow 172.23.160.0/20;
  69. deny all;
  70. proxy_pass http://keycloak_upstream; # Forward to upstream Keycloak server
  71. proxy_set_header Host $host;
  72. proxy_set_header X-Real-IP $remote_addr;
  73. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  74. proxy_set_header X-Forwarded-Proto $scheme;
  75. }
  76. location /metrics {
  77. deny all;
  78. return 403;
  79. }
  80. location /health {
  81. deny all;
  82. return 403;
  83. }
  84. # Error pages
  85. error_page 403 /403.html;
  86. error_page 404 /404.html;
  87. error_page 500 502 503 504 /50x.html;
  88. # Deny access to hidden files
  89. location ~ /\. {
  90. deny all;
  91. return 404;
  92. }
  93. }