diff options
Diffstat (limited to 'nginx')
| -rw-r--r-- | nginx/nginx.conf | 103 | 
1 files changed, 103 insertions, 0 deletions
| diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..1970845 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,103 @@ +user nginx; +worker_processes auto; +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + +events { +    worker_connections 1024; +} + +http { +    include /etc/nginx/mime.types; +    default_type application/octet-stream; + +    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' +                    '$status $body_bytes_sent "$http_referer" ' +                    '"$http_user_agent" "$http_x_forwarded_for"'; + +    access_log /var/log/nginx/access.log main; + +    sendfile on; +    tcp_nopush on; +    tcp_nodelay on; +    keepalive_timeout 65; +    types_hash_max_size 2048; + +    # 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; + +    # Gzip compression +    gzip on; +    gzip_vary on; +    gzip_min_length 1024; +    gzip_proxied any; +    gzip_comp_level 6; +    gzip_types +        application/atom+xml +        application/geo+json +        application/javascript +        application/x-javascript +        application/json +        application/ld+json +        application/manifest+json +        application/rdf+xml +        application/rss+xml +        application/xhtml+xml +        application/xml +        font/eot +        font/otf +        font/ttf +        image/svg+xml +        text/css +        text/javascript +        text/plain +        text/xml; + +    server { +        listen 8080; +        server_name localhost; +        root /usr/share/nginx/html; +        index index.html; + +        # Security configurations +        server_tokens off; +         +        # Cache static assets +        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { +            expires 1y; +            add_header Cache-Control "public, immutable"; +            add_header X-Frame-Options "SAMEORIGIN" always; +            add_header X-Content-Type-Options "nosniff" always; +        } + +        # Handle HTML files with shorter cache +        location ~* \.html$ { +            expires 1h; +            add_header Cache-Control "public, no-transform"; +            add_header X-Frame-Options "SAMEORIGIN" always; +            add_header X-Content-Type-Options "nosniff" always; +        } + +        # Handle root and fallback to index.html (SPA support) +        location / { +            try_files $uri $uri/ /index.html; +            add_header X-Frame-Options "SAMEORIGIN" always; +            add_header X-Content-Type-Options "nosniff" always; +        } + +        # Health check endpoint +        location /health { +            access_log off; +            return 200 "healthy\n"; +            add_header Content-Type text/plain; +        } + +        # Block access to hidden files +        location ~ /\. { +            deny all; +        } +    } +} | 
