# L7 Balancer Configuration & Advanced Routing This guide provides comprehensive documentation for Zerops L7 HTTP balancer configuration and advanced routing features. For basic setup instructions, see the [Domain & Access Configuration](/features/access) guide. The L7 HTTP Balancer handles all HTTP/HTTPS traffic and provides advanced application-layer capabilities: **Functions:** - SSL/TLS termination with automatic certificate management - Domain routing and virtual host management - Load balancing across multiple service instances - Advanced routing features (redirects, access policies, rate limiting) - Performance optimization through caching and compression **Architecture:** - Deployed in two containers for high availability - Scales automatically based on traffic patterns - Integrated with Let's Encrypt for SSL certificates - Configurable through advanced balancer settings ## L7 HTTP Balancer Configuration Access the advanced balancer configuration through your project's HTTP Balancer section → **Advanced balancer configuration**. ### Connection Handling Configure how the balancer manages client connections:
Setting Default Range Parameter
Maximum simultaneous connections per worker 4000 1024-65535 worker_connections
Accept multiple connections at once on on/off multi_accept
How long to keep idle connections open 30s 1s-300s keepalive_timeout
Maximum number of requests per connection 100000 1-1000000 keepalive_requests
:::tip Recommendations - **High-traffic websites**: Increase `worker_connections` to 8000 or higher - **API services**: Adjust `keepalive_timeout` to 60 for longer connections - **WebSocket applications**: Increase `keepalive_timeout` for persistent connections ::: ### Client Request Settings Control how the balancer handles incoming requests:
Setting Default Range Parameter
Timeout for receiving client request header 10s 1s-300s client_header_timeout
Timeout for receiving client request body 10s 1s-300s client_body_timeout
Maximum allowed size of client request body 512m 1k-2048m client_max_body_size
Reset connections that have timed out on on/off reset_timedout_connection
Timeout for transmitting response to client 2s 1s-300s send_timeout
:::tip Recommendations - **File upload services**: Increase `client_body_timeout` and `client_max_body_size` to accommodate large files - **Slow clients**: Increase header and body timeouts - **API endpoints**: Set `client_max_body_size` according to your API payload requirements ::: ### Buffer Settings Optimize memory usage for request and response handling:
Setting Default Range Parameter
Size of buffer for client request header 1k 1k-64k client_header_buffer_size
Number of buffers for large client headers 4 1-16 large_client_header_buffers_number
Size of buffers for large client headers 8k 1k-64k large_client_header_buffers_size
Size of buffer for client request body 16k 1k-1m client_body_buffer_size
:::tip Recommendations - **Large headers**: Increase header buffer sizes for applications with extensive headers - **File uploads**: Optimize `client_body_buffer_size` based on typical upload sizes - **Memory optimization**: Tune based on available memory and connection patterns ::: ### Proxy Settings Configure how the balancer communicates with backend services:
Setting Parameter Default Range
Enable buffering of client request body proxy_request_buffering off on/off
Enable buffering of responses from proxied server proxy_buffering on on/off
Size of the buffer used for reading the first part of the response proxy_buffer_size 32k 1k-256k
Number of buffers used for reading a response from the proxied server proxy_buffers_number 4 1-16
Size of buffers for reading a response from the proxied server proxy_buffers_size 256k 1k-1m
Size of buffers that can be busy sending response to the client proxy_busy_buffers_size 256k 1k-1m
:::tip Recommendations - **Real-time APIs**: Set `proxy_buffering` to off for lower latency - **Large responses**: Increase `proxy_buffer_size` for handling larger API responses - **Multimedia streaming**: Increase `proxy_buffers_size` and `proxy_buffers_number` for larger content ::: ### Performance Optimization Enable various performance enhancements:
Setting Default Range Parameter
Use sendfile() for file transfers on on/off sendfile
Enable TCP_NOPUSH socket option on on/off tcp_nopush
Enable TCP_NODELAY socket option on on/off tcp_nodelay
Enable gzip compression on on/off gzip
Rate limit for response transmission (0 = no limit) 0 0-1000m limit_rate
:::tip Recommendations - **File serving**: Ensure `sendfile` and `tcp_nopush` are enabled for static content - **Real-time applications**: Verify `tcp_nodelay` is enabled - **Bandwidth control**: Use `limit_rate` for traffic shaping - **Multimedia streaming**: Enable `sendfile` and `tcp_nopush` for optimal streaming performance ::: ### File Cache Settings Optimize file system operations:
Setting Default Range Parameter
Cache open file descriptors on on/off open_file_cache
Maximum number of elements in file cache 200000 1000-1000000 open_file_cache_max
Time after which unused cache elements are removed 20s 1s-300s open_file_cache_inactive
Time interval for checking cached elements validity 30s 1s-300s open_file_cache_valid
Minimum file uses to remain in cache 2 1-100 open_file_cache_min_uses
Cache file lookup errors on on/off open_file_cache_errors
:::tip Recommendations - **Static file serving**: Increase cache size and adjust timeouts - **Development**: Reduce validation timeout for faster file updates - **High I/O applications**: Optimize based on file access patterns ::: ### Security Settings Configure security-related options:
Setting Default Parameter
Emit nginx version in error messages and headers off server_tokens
**Best Practice:** Keep `server_tokens` disabled to avoid revealing server information. ## Advanced Routing Features The L7 HTTP Balancer supports sophisticated routing beyond basic domain mapping. Access the advanced location configuration through your project's HTTP Balancer section → click the **gear/settings icon** next to any domain location to open the **Advanced Location Configuration** dialog. ### Redirect Configuration Redirect requests to different URLs with full control: **Configuration Options:** - **Redirect URL**: Destination for redirected requests - **Redirect Code**: HTTP status code for redirection (e.g., 301, 302, 307, 308) - **Preserve Path**: Keep original path in redirect URL - **Preserve Query**: Keep original query parameters in redirect URL ### Access Policy Configuration Implement IP-based access control. If the request fails the check, a 403 Forbidden error is returned: **Policy Types:** - **Default Policy**: `allow` or `deny` - **CIDR Blocks**: List of IP addresses/ranges that will have the opposite policy than the default **Supported Formats:** - IPv4 address: `192.168.1.1` - IPv4 range: `192.168.1.0/24` - IPv6 address: `2001:db8::1` - IPv6 range: `2001:db8::/32` ### Rate Limiting Configuration Protect against abuse and ensure fair resource usage. When the rate limit is exceeded, requests are delayed (burst). If they cannot be processed in time, a 503 Service Temporarily Unavailable error is returned: **Configuration Parameters:** - **Rate Limit Key**: `binary_remote_addr` (per IP) or `server_name` (per domain) - **Rate**: Requests per second to allow - **Burst**: Number of requests to queue when rate exceeded - **Zone Name**: Memory zone for storing rate limiting state - **Zone Size**: Memory allocated for rate limiting data (in MB) ### Basic Authentication Add HTTP Basic Authentication to protected resources: **Configuration:** - **Realm**: Authentication realm name - **Users**: Username and password combinations ### Custom Content Responses Return custom content for specific conditions: **Configuration:** - **HTTP Status Code**: Any valid status code (200, 404, 503, etc.) - **Content**: Response body content - **Content Type**: MIME type (default: text/plain) *Need help? Join our [Discord community](https://discord.gg/zeropsio).*