DEV Community

Kb Bohara
Kb Bohara

Posted on

NGINX 102 Baby

“NGINX 102 Baby” guide focused on advanced settings—request size limits, timeouts, and related tweaks—without rehashing the basics covered in NGINX 101.


NGINX 102 Baby – Advanced Tuning

1. Request Size Limits

Increase the allowed request body size (e.g., for large file uploads):

# Global setting for all servers and locations.
# This applies unless overridden in a more specific block.
http {
    client_max_body_size 50m;  # Default for all servers and locations is 50 MB.

    server {
        listen 80;
        server_name example.com;

        # Server-level setting: Overrides the http-level setting for this server.
        # All locations under this server will use 100 MB unless further overridden.
        client_max_body_size 100m;  # Now, for this server, maximum body size is 100 MB.

        location / {
            proxy_pass http://localhost:3000;
            # Inherits the server-level setting (100 MB) by default.
            # Uncomment the next line to override it for this location only.
            # client_max_body_size 10m;  # For this location, maximum body size would be 10 MB.
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

2. Timeout Settings

Client-Side Timeouts

Set timeouts to avoid hanging connections:

server {
    client_body_timeout   60s;
    client_header_timeout 60s;
    keepalive_timeout     65s;
    send_timeout          60s;
    # other settings...
}
Enter fullscreen mode Exit fullscreen mode

Upstream/Proxy Timeouts

Ensure long-running backend responses are handled properly:

location /api/ {
    proxy_pass http://backend_server;
    proxy_connect_timeout 600s;
    proxy_send_timeout    600s;
    proxy_read_timeout    600s;
}
Enter fullscreen mode Exit fullscreen mode

Note: Suffix s makes units explicit (seconds).


3. Additional Performance Tweaks

Proxy Buffering

For handling large responses efficiently:

location /data/ {
    proxy_pass http://backend_server;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
}
Enter fullscreen mode Exit fullscreen mode

Gzip Compression

Reduce bandwidth with simple gzip settings:

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
}
Enter fullscreen mode Exit fullscreen mode

Connection & Rate Limiting

Prevent abuse with simple limits:

http {
    # Define a memory zone named "addr" (10MB) for connection limiting, keyed by client IP.
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    # Define a memory zone named "one" (10MB) for rate limiting, with a limit of 5 requests per second per client.
    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

    server {
        location / {
            # Limit each client to a maximum of 10 simultaneous connections.
            limit_conn addr 10;
        }
        location /api/ {
            # Limit clients to 5 requests per second, allow bursts up to 10, processing bursts without delay.
            limit_req zone=one burst=10 nodelay;
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

4. Testing & Reloading

Always verify your configuration before reloading:

sudo nginx -t && sudo systemctl reload nginx
Enter fullscreen mode Exit fullscreen mode

Top comments (0)