Objective
To disable unneeded Apache modules in order to reduce the memory utilized and improve performance. This may also result into improved security since it is a best security practice to not enable things you do not need.
Solution
First, take a look at what modules your Apache install currently loads on Apache startup. You can view a list of enabled modules by typing the following from shell:
[root@nowherelan]# httpd -M
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
access_compat_module (shared)
actions_module (shared)
alias_module (shared)
allowmethods_module (shared)
auth_basic_module (shared)
auth_digest_module (shared)
authn_anon_module (shared)
authn_core_module (shared)
authn_dbd_module (shared)
authn_dbm_module (shared)
authn_file_module (shared)
authn_socache_module (shared)
authz_core_module (shared)
authz_dbd_module (shared)
authz_dbm_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_owner_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cache_module (shared)
cache_disk_module (shared)
data_module (shared)
dbd_module (shared)
deflate_module (shared)
dir_module (shared)
dumpio_module (shared)
echo_module (shared)
env_module (shared)
expires_module (shared)
ext_filter_module (shared)
filter_module (shared)
headers_module (shared)
include_module (shared)
info_module (shared)
log_config_module (shared)
logio_module (shared)
mime_magic_module (shared)
mime_module (shared)
negotiation_module (shared)
remoteip_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
slotmem_plain_module (shared)
slotmem_shm_module (shared)
socache_dbm_module (shared)
socache_memcache_module (shared)
socache_shmcb_module (shared)
status_module (shared)
substitute_module (shared)
suexec_module (shared)
unique_id_module (shared)
unixd_module (shared)
userdir_module (shared)
version_module (shared)
vhost_alias_module (shared)
dav_module (shared)
dav_fs_module (shared)
dav_lock_module (shared)
lua_module (shared)
mpm_prefork_module (shared)
proxy_module (shared)
lbmethod_bybusyness_module (shared)
lbmethod_byrequests_module (shared)
lbmethod_bytraffic_module (shared)
lbmethod_heartbeat_module (shared)
proxy_ajp_module (shared)
proxy_balancer_module (shared)
proxy_connect_module (shared)
proxy_express_module (shared)
proxy_fcgi_module (shared)
proxy_fdpass_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_scgi_module (shared)
proxy_wstunnel_module (shared)
ssl_module (shared)
systemd_module (shared)
cgi_module (shared)
php7_module (shared)
In CentOS 7, one can disable Apache modules by modifying configuration files located in /etc/httpd/conf.modules.d/
, and commenting out lines including the LoadModule
directive.
In short, I was able to determine which modules I didn’t need by guessing and checking. I disabled a module followed by running a syntax check for Apache configuration files:
[root@nowherelan]# httpd -t
Syntax OK
If you get a syntax error like
“Starting httpd: Syntax error on line 565 of /etc/httpd/conf/httpd.conf: Invalid command ‘IndexOptions’, perhaps misspelled or defined by a module not included in the server configuration”, you probably removed a module you needed.
Once done, restart Apache
[root@nowherelan]# systemctl restart httpd.service
Verify that your web application still functions properly after making these changes.
By the time I was done, I only had the following modules left:
[root@nowherelan]# httpd -M
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
access_compat_module (shared)
alias_module (shared)
authz_core_module (shared)
autoindex_module (shared)
dir_module (shared)
headers_module (shared)
log_config_module (shared)
mime_module (shared)
rewrite_module (shared)
socache_shmcb_module (shared)
unixd_module (shared)
mpm_worker_module (shared)
ssl_module (shared)
systemd_module (shared)
php7_module (shared)
My System Configuration
- CentOS 7
- Apache 2.4