DEV Community

Kb Bohara
Kb Bohara

Posted on

1 2 1

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

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay