Modules

Modules: LoadModule, a2enmod and What to Turn Off

Almost every Apache 129 feature is a module, and a directive exists only while its module is loaded. A few are compiled in (static); the rest are loaded at startup by lines such as LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so, which Ubuntu 225 keeps in mods-available/NAME.load beside an optional NAME.conf of defaults. The package ships 116 modules and loads 29 (9 static, 20 shared).

Enabling a module, counting what is loaded, and finding the MPMShell
sudo a2enmod headers
sudo apache2ctl -M | grep -c _module
sudo apache2ctl -V | grep MPM
Output
Enabling module headers.
To activate the new configuration, you need to run:
  systemctl restart apache2.service
30
Server MPM:     prefork

a2enmod resolves dependencies (ssl pulls in socache_shmcb), a2dismod refuses to remove a module others need, and a reload suffices for an ordinary module despite the restart hint. Exactly one MPM is loaded; it decides how connections are handled, and it is prefork here because mod_php requires it (PHP-FPM via proxy_fcgi and MPMs and Workers move to PHP-FPM and event).

Each module costs memory in every process and adds attack surface. Candidates to disable: autoindex, which lists directories lacking an index file; status, a local-only map of your clients and URLs at /server-status; negotiation, needed only for MultiViews and type maps; and access_compat, which exists only for the old Order/Allow/Deny syntax. autoindex is marked essential, so a2dismod autoindex asks you to type Yes, do as I say! (or pass -f).