Back to Blog

Apache Web Server Explained

Apache Web Server Explained
Command of the Day
apache2ctl -S

What it does: Dumps all parsed Apache virtual hosts, port configurations, and default servers with line numbers for fast debugging.

The Apache HTTP Server (commonly referred to simply as Apache) is one of the most iconic pieces of open-source software in history. Launched in 1995, Apache formed the foundational "A" in the famous LAMP stack (Linux, Apache, MySQL, PHP) that helped build the early World Wide Web.

In this guide, we explore how Apache works, its unique strengths, and how it manages web traffic on Linux servers.


1. How Apache Works

Apache is built around a modular core. Functionality like URL rewriting, SSL encryption, authentication, and compression are handled by loadable modules (mod_rewrite, mod_ssl, mod_deflate, mod_authz_core).

Multi-Processing Modules (MPMs)

Apache determines how it handles incoming network connections via MPMs:

  1. mpm_prefork: Creates non-threaded child processes per connection. Safe for non-thread-safe libraries (like legacy mod_php), but memory intensive.
  2. mpm_worker: Hybrid multi-process, multi-threaded model capable of handling higher concurrency with lower memory usage.
  3. mpm_event: The modern default MPM. Uses dedicated listener threads to manage idle keep-alive connections asynchronously, bringing concurrency closer to Nginx.

2. Key Features of Apache

1. Decentralized Configuration (.htaccess)

One of Apache's defining advantages is .htaccess. Non-root users can override server configurations directly within their web directories without restarting the main web server daemon:

# Example .htaccess redirect rule
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

(This makes Apache extremely popular in shared hosting and standard WordPress environments).

2. Virtual Hosting (<VirtualHost>)

Apache allows hosting multiple websites on a single IP address:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

3. Essential Apache Commands on Ubuntu/Debian

  • Enable a site: sudo a2ensite example.com.conf
  • Disable a site: sudo a2dissite example.com.conf
  • Enable a module: sudo a2enmod rewrite
  • Disable a module: sudo a2dismod autoindex
  • Test syntax: sudo apache2ctl configtest
  • List virtual hosts: sudo apache2ctl -S

Common Mistakes

  • Leaving AllowOverride None when .htaccess is needed: By default, modern Apache disables .htaccess for performance and security. You must specify AllowOverride All in the <Directory> block to enable it.
  • Using mpm_prefork on high-traffic servers: Prefork consumes substantial RAM under high load; switch to mpm_event with php-fpm.

Troubleshooting

  • AH00558: Could not reliably determine the server's fully qualified domain name: Add ServerName localhost to /etc/apache2/apache2.conf.
  • 403 Forbidden: Check directory permissions (chmod 755 /var/www/html) and ensure Require all granted is set in the virtual host.

Best Practices

  • Disable unused modules to conserve memory: sudo a2dismod status info.
  • Always verify configuration syntax with apache2ctl configtest before issuing systemctl restart apache2.

Frequently Asked Questions

Is Apache slower than Nginx?

For static files under extreme concurrency, Nginx is generally faster. However, with mpm_event and php-fpm, modern Apache delivers exceptional performance while retaining full .htaccess flexibility.


Conclusion

Apache remains a robust, highly extensible web server trusted by millions of developers worldwide. Deploy it on your RivinCloud VPS for maximum flexibility and .htaccess compatibility!