Skip to main content

Installing Apache HTTP Server

1. Installing from Package Managers

Platform Package Manager Command Notes
Ubuntu/Debian apt sudo apt update && sudo apt install apache2 Installs Apache 2.4.x
CentOS/RHEL/Fedora yum/dnf sudo dnf install httpd Installs Apache 2.4.x
macOS brew brew install httpd Installs Apache 2.4.x with OpenSSL support
Windows MSI Installer Download from apache.org Manual installation required

Example: Verify Installation

sudo systemctl status apache2
Note: On some systems, the service name might be httpd instead of apache2.

2. Installing from Source Code

Installing Apache HTTP Server from source code provides the most control over the build configuration and is useful for environments where pre-built packages are not available or when custom modules need to be compiled in.

Step Description Command
1 Download the latest stable release of Apache HTTP Server source code from the official website or mirror. curl -O https://downloads.apache.org/httpd/httpd-2.4.58.tar.gz
2 Extract the downloaded archive. tar -xzf httpd-2.4.58.tar.gz
3 Navigate to the extracted directory. cd httpd-2.4.58
4 Run the configuration script with desired options (e.g., specifying installation prefix). ./configure --prefix=/usr/local/apache2
5 Compile the source code. make
6 Install the compiled binaries and configuration files. make install

Example: Configuration Options

./configure --prefix=/usr/local/apache2 \
            --enable-mods-shared=all \
            --with-ssl \
            --enable-rewrite \
            --disable-userdir
Note: Ensure that required dependencies such as apr, apr-util, and openssl are installed before compiling Apache from source.
Warning: Compiling from source requires a C compiler and development headers. On Debian/Ubuntu systems, install them using sudo apt-get install build-essential.

3. Verifying Installation

Command Description Output
apache2ctl -v Display Apache version Server version: Apache/2.4.57 (Ubuntu)
httpd -v Display Apache version (alternative) Server version: Apache/2.4.57 (Ubuntu)
apache2ctl -t Test configuration syntax Syntax OK
systemctl status apache2 Check service status (Ubuntu/Debian) active (running)
systemctl status httpd Check service status (CentOS/RHEL) active (running)

Example: Testing Apache Configuration

apache2ctl -t
Syntax OK
Note: If apache2ctl is not found, try httpd -t or ensure Apache is installed correctly.

4. Understanding Installation Directory Structure

Directory Description Contents
/etc/httpd/ Main configuration directory main config files like httpd.conf, ssl/, conf.d/
/var/www/ Default document root HTML files, images, and other web content
/var/log/httpd/ Log files directory access_log, error_log, and other logs
/usr/sbin/httpd Binary executable Apache HTTP Server binary
/usr/lib/httpd/modules/ Module directory Loadable modules like mod_rewrite.so, mod_ssl.so
/etc/httpd/conf.d/ Additional config directory User-defined config files (e.g., custom.conf)
Note: The exact paths may vary depending on the OS distribution (e.g., CentOS vs Ubuntu). On some systems, the config directory might be /etc/apache2/ instead of /etc/httpd/.

5. Locating Configuration Files

File Description Default Location Notes
httpd.conf Main configuration file /etc/httpd/conf/httpd.conf Contains global server directives and module loading
extra/httpd-vhosts.conf Virtual host configurations /etc/httpd/conf.d/extra/httpd-vhosts.conf Used for defining virtual hosts; included in main config
httpd.conf Includes additional configuration files /etc/httpd/conf.d/ Directory for additional config files; typically includes .conf files

Example: Main Configuration File Location

ls -l /etc/httpd/conf/httpd.conf
Note: On some systems, the configuration directory might be /etc/apache2/ or /usr/local/apache2/conf/.

6. Understanding Binary Locations

Platform Binary Location Notes
Linux (Debian/Ubuntu) /usr/sbin/apache2 Installed via apt package manager
Linux (RHEL/CentOS/Fedora) /usr/sbin/httpd Installed via yum or dnf
macOS (Homebrew) /usr/local/bin/httpd Installed via brew install httpd
macOS (MacPorts) /opt/local/sbin/httpd Installed via sudo port install apache2
Windows C:\Program Files\Apache Software Foundation\Apache2.4\bin\httpd.exe Default installation path; may vary based on setup
FreeBSD /usr/local/sbin/httpd Installed via pkg install apache24
Note: The exact paths may vary depending on the version and installation method. Always verify the location using which httpd or where httpd on your system.

7. Setting Up User and Group Ownership

Configuration Directive Description Default Value Notes
User Sets the user ID Apache will run as daemon Must be a valid system user
Group Sets the group ID Apache will run as daemon Must be a valid system group

Example: Setting User and Group

sudo useradd -r -s /bin/false apache
sudo groupadd -r apache

Example: Configuring Apache to Use Custom User/Group

User apache
Group apache
Note: On some systems, the default user and group may be www-data or httpd. Ensure the user and group exist before setting these directives.
Warning: Changing the user and group under which Apache runs can affect file permissions and access to web content. Ensure proper ownership and permissions are set after making changes.

8. Configuring File Permissions

Permission Description Recommended Setting Notes
User Ownership Apache processes should run under a dedicated user (e.g., www-data on Debian/Ubuntu or apache on RHEL/CentOS) www-data or apache Ensure the web server user has read access to files but not write access unless necessary
Group Ownership Files should belong to a group that includes the web server user (e.g., www-data) www-data Use chgrp to set group ownership
File Permissions Files should generally be readable by the web server user (e.g., 644) 644 Use chmod 644 to set file permissions
Directory Permissions Directories should allow traversal by the web server user (e.g., 755) 755 Use chmod 755 to set directory permissions
Sensitive Files Configuration files and sensitive data should not be accessible via the web server (e.g., 600) 600 Use chmod 600 for files like .htpasswd, httpd.conf

Example: Setting File Permissions

chown -R www-data:www-data /var/www/html
chmod -R 644 /var/www/html/*.html
chmod -R 755 /var/www/html/
chmod 600 /etc/apache2/.htpasswd
Note: On systems where www-data is not available, use the appropriate user/group for your OS (e.g., apache on CentOS).
Warning: Incorrect file permissions can lead to security vulnerabilities or prevent Apache from reading files correctly.

9. Understanding Apache Process Model

The Apache HTTP Server uses a modular architecture and supports multiple process models to handle incoming requests. The choice of process model affects performance, resource usage, and scalability.

Model Description Use Case Notes
prefork Pre-forks a number of child processes, each capable of handling one request at a time. Stable, compatible with older modules; good for non-thread-safe applications. Each process uses more memory. Default on many systems.
worker Uses multiple child processes, each with multiple threads to handle requests. Better performance under high load; efficient use of system resources. Requires thread-safe modules. May not work with all legacy modules.
event Similar to worker but uses event-driven architecture for handling connections. High-concurrency environments; better performance with many idle connections. NEW in Apache 2.4; experimental in earlier versions.
mpm_itk Per-process memory limits and user switching; each process runs under a different user ID. Multi-tenant environments where security and isolation are critical. Requires mod_itk to be installed separately.

Example: Configuring the Prefork MPM

<IfModule mpm_prefork_module>
    StartServers 5
    MinSpareServers 5
    MaxSpareServers 10
    ServerLimit 256
    MaxRequestWorkers 256
    MaxConnectionsPerChild 10000
</IfModule>

Example: Configuring the Worker MPM

<IfModule mpm_worker_module>
    StartServers 2
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadLimit 64
    ThreadsPerChild 25
    MaxRequestWorkers 400
    MaxConnectionsPerChild 10000
</IfModule>
Note: The MPM must be selected at compile time and cannot be changed without recompiling Apache.
Warning: Mixing MPMs or switching between them can lead to unpredictable behavior and server instability.

10. Verifying Port Availability

Example: Check if port 80 is in use

sudo lsof -i :80
Command Description Output Example
lsof -i :80 Lists processes using port 80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
netstat -tuln | grep :80 Shows listening TCP ports including 80 tcp6 0 0 :::80 :::* LISTEN 1234/httpd
Note: If port 80 is already in use, Apache will fail to start or bind to that port.

11. Checking System Requirements

Requirement Description Minimum Version Notes
Operating System Supported OS Linux, Windows, macOS Apache HTTP Server runs on most operating systems
Processor Architecture x86, x86_64, ARM 64-bit recommended for better performance
Memory RAM 512 MB Minimum for basic functionality; more for high traffic
Disk Space Storage 100 MB Space for installation files and logs
Network Connectivity Internet access Required for downloading packages and updates
Note: Ensure that your system meets these requirements before proceeding with the installation.

12. Understanding Apache Version Differences

Version Release Date Key Features Notes
2.4.x 2012 Modular architecture, improved performance, enhanced security Current stable branch; recommended for production use
2.2.x 2002 Mod_rewrite, mod_ssl, basic security enhancements Deprecated; no longer supported
2.0.x 2000 First major release with mod_rewrite, mod_ssl Legacy; not recommended for use

Apache 2.4 vs 2.2

  • Module Loading: 2.4 uses LoadModule directive more efficiently
  • Security: 2.4 includes improved TLS support and security headers
  • Performance: 2.4 has better handling of concurrent requests
  • Configuration: 2.4 introduces <If> and <ElseIf> directives

Was this article helpful?