Apache web server is one of the most popular web servers in the world, used by millions of websites and organizations. It is capable of handling high traffic to websites and applications. However, its default settings support only average traffic to websites. In order to scale your server, you need to enable its multiprocessing module (MPM). In this article, we will learn how to enable Apache MPM Prefork.
Apache multiprocessing module supports prefork, workers and events. Prefork is a configuration wherein you have a single controller process that spawns all child processes for listening to incoming connections. In case of workers, each worker can, in turn, create multiple threads, one for each incoming request. MPM events are designed to support more requests by passing some of the processing to supporting threads, and freeing up main threads to process new requests.
For our example, we will enable Apache MPM prefork.
How to Enable Apache MPM Prefork
Here are the steps to enable Apache MPM prefork module. We will be using Ubuntu/Debian system for our purpose.
1. Enable MPM Prefork
In most cases, Apache MPM module is already installed along with Apache server, but not enabled. You can only use one type of MPM configuration at a time. In other words, if you use Prefork, you will need to disable worker and event.
So open terminal and run the following command to check if prefork is enabled or not.
$ apache2ctl -M | grep prefork
If you don’t get any output, it means prefork is not enabled yet. In such case, run the following commands to disable MPM worker & event, and enable prefork.
$ sudo a2dismod mpm_event $ sudo a2dismod mpm_worker
Restart Apache server to apply changes.
$ sudo systemctl restart apache2
Enable MPM Prefork.
$ sudo a2enmod mpm_prefork
Restart Apache Server to apply changes.
$ sudo systemctl restart apache2
Please note, a2enmod and a2dismod commands are available only in Ubuntu/Debian systems. If you are using Redhat/CentOS/Fedora/SUSE Linux, then you need to open Apache configuration file in a text editor.
$ sudo vi /etc/apache2/httpd.conf
Comment the line containing modules for worker and event, by adding # at its beginning, and uncomment the line containing prefork module by removing # at its beginning, as shown below.
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so #LoadModule mpm_worker_module modules/mod_mpm_worker.so #LoadModule mpm_event_module modules/mod_mpm_event.so
Save and close the file, and restart Apache server to apply changes.
2. Configure MPM_Prefork
In most cases, the default configuration of MPM Prefork is enough to handle large web traffic. However, if you need to customize it, then here is how to do it.
Open MPM Prefork’s configuration file in a text editor.
$ sudo vi /etc/apache2/mods-available/mpm_prefork.conf
In this file, you will see the following options.
StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0
Modify them to the following values. Please make sure that your hardware can handle these values. Also, increase them only to the extent of handling your expected load.
StartServers 4 MinSpareServers 3 MaxSpareServers 40 MaxRequestWorkers 200 MaxConnectionsPerChild 10000
Restart Apache server.
$ sudo systemctl restart apache2
At this point, MPM Prefork is enabled on your system. You can test it using Apache bench to see if it is able to handle your expected load.
Also read:
How to Change Apache Prefork to Worker
How to Enable PHP in Apache
How to Install Rspamd in Ubuntu
How to Change Wifi Password in terminal
How to Set JAVA_HOME in Ubuntu
Related posts:
Sreeram has more than 10 years of experience in web development, Python, Linux, SQL and database programming.