Nginx Config Generator

Generate production-ready nginx.conf files visually. Choose a use-case, configure options, and copy a ready-to-use config with SSL, gzip, CORS, and security headers.

Use Case
Static Site
Reverse Proxy
PHP-FPM
Node.js App
Load Balancer
Serve HTML/CSS/JS files from disk. Supports SPA fallback (try_files).
Server
Document Root
SPA / Single-Page App
Enable try_files for SPA routing
SSL / TLS
Enable SSL (Let's Encrypt style)
HTTP → HTTPS redirect
Gzip Compression
Enable gzip compression
Compresses text, CSS, JS, JSON, SVG and more. Uses compression level 6 — good balance of speed vs. ratio.
Security Headers
Add security headers
Adds: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy, Content-Security-Policy.
CORS
Enable CORS headers
Logging
Miscellaneous
nginx.conf51 lines
server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    client_max_body_size 10m;

    # Gzip compression
    gzip              on;
    gzip_vary         on;
    gzip_proxied      any;
    gzip_comp_level   6;
    gzip_buffers      16 8k;
    gzip_http_version 1.1;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/json
        application/javascript
        application/xml
        application/rss+xml
        application/atom+xml
        image/svg+xml;

    # 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;
    add_header Permissions-Policy        "camera=(), microphone=(), geolocation=()" always;
    add_header Content-Security-Policy   "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self';" always;

    root  /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # Static asset caching
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2?|ttf|svg)$ {
        expires     1y;
        add_header  Cache-Control "public, immutable";
        access_log  off;
    }
}
Quick Tips
Test config: nginx -t
Reload: systemctl reload nginx
Place at: /etc/nginx/sites-available/example.com
Symlink: ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/