Apache2 KeepAlive Configuration: When and How to Enable It for Optimal Performance


2 views

html

KeepAlive is an HTTP feature that allows multiple requests to be sent over a single TCP connection, reducing latency and improving page load times. By default, Apache2 disables this feature (KeepAlive Off) due to potential resource consumption concerns.

The main directives controlling KeepAlive behavior in Apache2 are:


# In httpd.conf or apache2.conf
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

Consider enabling KeepAlive when:

  • Your server hosts many small static assets (CSS, JS, images)
  • You observe high latency between client and server
  • Your traffic pattern involves multiple sequential requests

Use ab (Apache Benchmark) to test both configurations:


# Without KeepAlive
ab -n 1000 -c 100 http://yoursite.com/

# With KeepAlive
ab -n 1000 -c 100 -k http://yoursite.com/

For a media-heavy site:


<IfModule mod_http2.c>
    KeepAlive On
    KeepAliveTimeout 2
    MaxKeepAliveRequests 500
</IfModule>

For an API endpoint:


<VirtualHost *:443>
    KeepAlive Off
    # API responses are typically single requests
</VirtualHost>

After enabling KeepAlive, monitor these metrics:


apachectl status | grep 'KeepAlive'
netstat -anp | grep httpd | grep ESTABLISHED | wc -l

If you encounter problems:

  1. Check error logs: tail -f /var/log/apache2/error.log
  2. Verify module is loaded: apache2ctl -M | grep keepalive
  3. Adjust timeout values incrementally

KeepAlive is an HTTP feature that allows multiple requests to be sent over a single TCP connection. In Apache2, this setting is controlled by three main directives:

KeepAlive On|Off
KeepAliveTimeout [seconds]
MaxKeepAliveRequests [number]

The decision to enable KeepAlive depends on your server's workload characteristics:

  • High-latency connections: KeepAlive significantly benefits mobile clients or geographically distributed users
  • Resource-constrained servers: May suffer from connection exhaustion with KeepAlive enabled
  • Static-heavy sites: Typically see greater benefits than dynamic content sites

For a general-purpose web server handling mixed content:

# /etc/apache2/apache2.conf or .htaccess
KeepAlive On
KeepAliveTimeout 2
MaxKeepAliveRequests 100

For a high-traffic API server:

KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 0  # Unlimited requests per connection

Use tools like ab (Apache Benchmark) to test different configurations:

ab -n 1000 -c 100 -k http://yourserver.com/test.html

Key metrics to monitor:

  • Requests per second
  • Time per request
  • Connection times

If you experience connection problems after enabling KeepAlive:

# Check current connections
netstat -ant | grep :80 | wc -l

# Monitor server status
apache2ctl status