Tuning Apache/Nginx for Drupal workloadsfor Drupal 8 , 9 , 10 , and 11

Last updated :  

Welcome back to our Performance Optimization series for Drupal. Previously, we discussed leveraging Varnish to enhance your site's caching capabilities and improve response times. Today, we focus on fine-tuning your web server, particularly Apache and Nginx, to serve Drupal applications more efficiently. With the right configurations, you can significantly boost your server's ability to handle concurrent connections and deliver faster response times.

Tuning Apache for Drupal Workloads

Apache is a popular choice for serving web applications, including Drupal. To optimize Apache for Drupal, you should focus on the following settings:

1. Adjusting the Prefork Module

The Prefork module is often used with PHP applications like Drupal. The following adjustments can help balance server load:

  • StartServers: Specifies the number of child server processes created on startup. A good starting value might be 5.
  • MinSpareServers and MaxSpareServers: Controls the minimum and maximum number of idle processes. Set these to 5 and 10 respectively.
  • MaxRequestWorkers: Determines the maximum number of simultaneous requests that can be served. This might be set to 150 or higher if your resources allow.

2. Enable Compression and Caching

To reduce the load on the server and improve site performance, enable mod_deflate and mod_cache to compress outbound content and cache frequently requested resources.


            a2enmod deflate
            a2enmod cache
            a2enmod cache_disk
            

Modify your httpd.conf or apache2.conf to enable these modules:


            <IfModule mod_deflate.c>
                AddOutputFilterByType DEFLATE text/html text/plain text/xml
            </IfModule>
            <IfModule mod_cache.c>
                CacheRoot "/var/cache/apache2/mod_cache_disk"
                CacheEnable disk "/"
                CacheDirLevels 2
                CacheDirLength 1
                CacheIgnoreHeaders Set-Cookie
            </IfModule>
            

Tuning Nginx for Drupal Workloads

Nginx is known for its ability to handle high levels of traffic efficiently. Here are the optimal settings for running Drupal:

1. Worker Processes and Connections

Configure Nginx to utilize your server’s CPU and memory effectively by setting the following in your Nginx configuration file:

  • worker_processes: Set this to the number of CPU cores available. For example, worker_processes auto; allows Nginx to automatically select the optimal number.
  • worker_connections: Limits the maximum number of simultaneous connections. A value like 1024 or higher is appropriate for a modern server.

            worker_processes auto;
            events {
                worker_connections 1024;
            }
            

2. Enable Gzip Compression

Gzip compression reduces the size of transmitted data. Ensure this is enabled in your Nginx configuration:


            gzip on;
            gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
            gzip_vary on;
            

In conclusion, tuning your Apache or Nginx server involves careful adjustments to both resource limits and feature sets designed to optimize your server for Drupal’s dynamic resource demands. As you implement these practices, monitoring and adjustments tailored to your traffic patterns will help maintain optimal performance.

In our next lesson, we’ll explore Offloading Static Assets to a CDN, a strategy that complements server optimizations by reducing the load on your web server and delivering content more efficiently to your users.