
How to Install the Apache Web Server on Ubuntu 24
Whether you’re setting up your first web server or migrating to the latest Ubuntu release, getting Apache running on Ubuntu 24 is one of those essential skills every sysadmin and developer needs in their toolkit. This guide will walk you through everything from the initial installation to optimization tips that’ll make your server purr like a well-tuned machine. We’ll cover the gotchas, the best practices, and even some neat tricks that’ll save you headaches down the road.
How Apache Works on Ubuntu
Apache HTTP Server (httpd) operates as a modular, process-based web server that handles HTTP requests and serves web content. On Ubuntu 24, it integrates seamlessly with systemd for service management and uses the familiar Debian-style configuration structure.
Here’s what happens under the hood:
- Master Process: Runs as root, manages worker processes and configuration
- Worker Processes: Handle actual HTTP requests (run as www-data user)
- Module System: Extends functionality through loadable modules
- Virtual Hosts: Allows multiple websites on a single server
The configuration follows this hierarchy:
/etc/apache2/apache2.conf
– Main configuration file/etc/apache2/sites-available/
– Virtual host definitions/etc/apache2/sites-enabled/
– Active virtual hosts (symlinks)/etc/apache2/mods-available/
– Available modules/etc/apache2/mods-enabled/
– Active modules
Step-by-Step Installation Guide
Let’s get your hands dirty with the actual installation. First things first – make sure your system is up to date:
sudo apt update && sudo apt upgrade -y
Installing Apache
Ubuntu 24 ships with Apache 2.4.x in the default repositories. Installation is straightforward:
sudo apt install apache2 -y
This command installs Apache along with essential dependencies. The installation process automatically:
- Creates the
www-data
user and group - Sets up the directory structure in
/etc/apache2/
- Enables the service to start on boot
- Starts Apache immediately
Verifying the Installation
Check if Apache is running:
sudo systemctl status apache2
You should see output indicating the service is active and running. Now test it in your browser by navigating to your server’s IP address. You’ll see the default Apache2 Ubuntu Default Page.
To find your server’s IP address:
ip addr show | grep "inet " | grep -v 127.0.0.1
Essential Service Management Commands
Here are the commands you’ll use daily:
# Start Apache
sudo systemctl start apache2
# Stop Apache
sudo systemctl stop apache2
# Restart Apache (stops then starts)
sudo systemctl restart apache2
# Reload configuration without stopping
sudo systemctl reload apache2
# Enable auto-start on boot
sudo systemctl enable apache2
# Check status
sudo systemctl status apache2
Configuration and Optimization
Configuring Your First Virtual Host
The default site configuration is fine for testing, but you’ll want to create your own virtual host for production use:
sudo nano /etc/apache2/sites-available/your-domain.conf
Add this configuration (replace your-domain.com with your actual domain):
<VirtualHost *:80>
ServerName your-domain.com
ServerAlias www.your-domain.com
DocumentRoot /var/www/your-domain
ErrorLog ${APACHE_LOG_DIR}/your-domain_error.log
CustomLog ${APACHE_LOG_DIR}/your-domain_access.log combined
<Directory /var/www/your-domain>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Create the document root directory:
sudo mkdir -p /var/www/your-domain
sudo chown -R www-data:www-data /var/www/your-domain
sudo chmod -R 755 /var/www/your-domain
Enable the site and disable the default:
sudo a2ensite your-domain.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
Essential Modules
Ubuntu’s Apache comes with useful modules that aren’t enabled by default. Here are the most important ones:
# Enable URL rewriting (essential for most CMSs)
sudo a2enmod rewrite
# Enable SSL support
sudo a2enmod ssl
# Enable headers manipulation
sudo a2enmod headers
# Enable compression
sudo a2enmod deflate
# Reload to apply changes
sudo systemctl reload apache2
Real-World Examples and Use Cases
Performance Comparison: Apache vs Alternatives
Web Server | Requests/sec (avg) | Memory Usage | Configuration | Best For |
---|---|---|---|---|
Apache 2.4 | 4,500-6,000 | High | Flexible | Complex applications, .htaccess support |
Nginx | 8,000-12,000 | Low | Simple | Static content, reverse proxy |
Lighttpd | 6,000-8,000 | Very Low | Moderate | Small to medium sites |
Common Scenarios and Solutions
Scenario 1: WordPress Hosting
WordPress sites need specific Apache configurations for optimal performance:
# Enable required modules
sudo a2enmod rewrite expires headers
# WordPress-optimized virtual host
<VirtualHost *:80>
ServerName wordpress-site.com
DocumentRoot /var/www/wordpress-site
<Directory /var/www/wordpress-site>
Options FollowSymLinks
AllowOverride All
Require all granted
# Security headers
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
</Directory>
# Enable compression for common file types
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
</IfModule>
</VirtualHost>
Scenario 2: High-Traffic Site Optimization
For sites expecting heavy traffic, tune the Multi-Processing Module (MPM):
sudo nano /etc/apache2/mods-available/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxRequestWorkers 256
MaxConnectionsPerChild 4000
</IfModule>
Troubleshooting Common Issues
Issue: Port 80 Already in Use
# Check what's using port 80
sudo ss -tulpn | grep :80
# If it's another Apache instance
sudo pkill apache2
sudo systemctl start apache2
Issue: Permission Denied Errors
# Fix ownership and permissions
sudo chown -R www-data:www-data /var/www/
sudo find /var/www/ -type d -exec chmod 755 {} \;
sudo find /var/www/ -type f -exec chmod 644 {} \;
Issue: Virtual Host Not Working
# Check if site is enabled
sudo a2ensite your-domain.conf
# Test Apache configuration
sudo apache2ctl configtest
# Check Apache error logs
sudo tail -f /var/log/apache2/error.log
Security Hardening
Out of the box, Apache needs some security tweaks. Here’s a practical security configuration:
sudo nano /etc/apache2/conf-available/security.conf
Add these directives:
# Hide Apache version
ServerTokens Prod
ServerSignature Off
# Prevent access to .htaccess files
<Files ~ "^\.ht">
Require all denied
</Files>
# Disable server-status and server-info
<Location "/server-status">
Require all denied
</Location>
<Location "/server-info">
Require all denied
</Location>
# Security headers
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
Enable the security configuration:
sudo a2enconf security
sudo systemctl reload apache2
SSL/TLS Configuration with Let’s Encrypt
Modern websites need HTTPS. Let’s Encrypt makes it free and easy:
# Install Certbot
sudo apt install certbot python3-certbot-apache -y
# Get SSL certificate (replace with your domain)
sudo certbot --apache -d your-domain.com -d www.your-domain.com
# Test auto-renewal
sudo certbot renew --dry-run
Certbot automatically modifies your Apache configuration to redirect HTTP to HTTPS and sets up SSL virtual hosts.
Monitoring and Logging
Log Analysis
Ubuntu Apache logs are stored in /var/log/apache2/
. Here are some useful commands for log analysis:
# Monitor access log in real-time
sudo tail -f /var/log/apache2/access.log
# Find most common IP addresses
sudo awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10
# Find 404 errors
sudo grep " 404 " /var/log/apache2/access.log
# Monitor error log
sudo tail -f /var/log/apache2/error.log
Performance Monitoring
Enable mod_status for real-time server statistics:
sudo a2enmod status
Add this to your main configuration:
<Location "/server-status">
SetHandler server-status
Require ip 127.0.0.1
Require ip YOUR_IP_ADDRESS
</Location>
Access statistics at http://your-server/server-status
Automation and Scripting
Here’s a bash script to automate virtual host creation:
#!/bin/bash
# create-vhost.sh
DOMAIN=$1
if [ -z "$DOMAIN" ]; then
echo "Usage: $0 domain.com"
exit 1
fi
# Create document root
sudo mkdir -p /var/www/$DOMAIN
sudo chown www-data:www-data /var/www/$DOMAIN
# Create virtual host configuration
sudo tee /etc/apache2/sites-available/$DOMAIN.conf > /dev/null <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot /var/www/$DOMAIN
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
<Directory /var/www/$DOMAIN>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
# Enable site
sudo a2ensite $DOMAIN.conf
sudo systemctl reload apache2
echo "Virtual host for $DOMAIN created successfully!"
Make it executable and use it:
chmod +x create-vhost.sh
sudo ./create-vhost.sh example.com
Integration with Other Tools
Database Integration
Most web applications need database support. Install PHP and MySQL:
# Install LAMP stack components
sudo apt install php libapache2-mod-php mysql-server php-mysql -y
# Enable PHP module
sudo a2enmod php8.3
sudo systemctl restart apache2
Reverse Proxy Setup
Use Apache as a reverse proxy for Node.js applications:
# Enable proxy modules
sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests
# Virtual host configuration for reverse proxy
<VirtualHost *:80>
ServerName nodeapp.com
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
Interesting Facts and Advanced Use Cases
- Module Madness: Apache has over 60 official modules, from mod_rewrite for URL manipulation to mod_security for web application firewall functionality
- Memory Per Process: Each Apache worker process typically uses 15-25MB of RAM, making it resource-intensive compared to event-driven servers
- Legacy Support: Apache can run CGI scripts from the 1990s without modification – talk about backward compatibility!
- Global Usage: Despite Nginx’s growth, Apache still powers about 31% of all websites (as of 2024)
Unconventional Use Cases
File Server with WebDAV:
sudo a2enmod dav dav_fs
# Configure WebDAV for file sharing over HTTP
Git Repository Hosting:
sudo a2enmod cgi
# Host Git repositories accessible via HTTP
Load Balancer:
sudo a2enmod proxy_balancer
# Distribute load across multiple backend servers
Performance Tuning for Production
For production environments, especially if you’re considering a VPS hosting solution or a dedicated server, these optimizations are crucial:
# Disable unnecessary modules
sudo a2dismod autoindex -f
sudo a2dismod negotiation -f
# Enable caching
sudo a2enmod cache cache_disk expires
sudo systemctl restart apache2
Add caching headers to your virtual host:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
Conclusion and Recommendations
Apache on Ubuntu 24 remains a solid choice for web hosting, especially when you need maximum compatibility and flexibility. While it may not win the raw performance battle against Nginx, its modular architecture and extensive documentation make it ideal for complex applications and development environments.
Use Apache when you need:
- .htaccess support for distributed configuration
- Complex URL rewriting and redirections
- Legacy application compatibility
- Extensive module ecosystem
- Shared hosting environments
Consider alternatives when:
- Serving primarily static content (use Nginx)
- Memory is extremely limited (use Lighttpd)
- Need maximum concurrent connections (use Nginx or Lighttpd)
For most developers and small to medium businesses, Apache provides the perfect balance of features, stability, and ease of use. The installation process on Ubuntu 24 is streamlined, and the wealth of available documentation means you’ll rarely be stuck without a solution.
Remember to keep your Apache installation updated, monitor your logs regularly, and don’t forget to implement proper security measures. Whether you’re running on a budget VPS or a high-end dedicated server, Apache will serve you well when properly configured and maintained.
Start with the basic installation, get comfortable with virtual hosts and SSL configuration, then gradually explore advanced features like caching, compression, and security modules. Before you know it, you’ll be managing Apache servers like a pro!

This article incorporates information and material from various online sources. We acknowledge and appreciate the work of all original authors, publishers, and websites. While every effort has been made to appropriately credit the source material, any unintentional oversight or omission does not constitute a copyright infringement. All trademarks, logos, and images mentioned are the property of their respective owners. If you believe that any content used in this article infringes upon your copyright, please contact us immediately for review and prompt action.
This article is intended for informational and educational purposes only and does not infringe on the rights of the copyright owners. If any copyrighted material has been used without proper credit or in violation of copyright laws, it is unintentional and we will rectify it promptly upon notification. Please note that the republishing, redistribution, or reproduction of part or all of the contents in any form is prohibited without express written permission from the author and website owner. For permissions or further inquiries, please contact us.