How to Install Apache Server

How to Install Apache Server Apache HTTP Server, commonly referred to as Apache, is the most widely used web server software in the world. Developed and maintained by the Apache Software Foundation, it powers over a third of all websites globally, including some of the most high-traffic platforms. Its open-source nature, robust security features, extensive module support, and cross-platform compat

Oct 30, 2025 - 10:19
Oct 30, 2025 - 10:19
 0

How to Install Apache Server

Apache HTTP Server, commonly referred to as Apache, is the most widely used web server software in the world. Developed and maintained by the Apache Software Foundation, it powers over a third of all websites globally, including some of the most high-traffic platforms. Its open-source nature, robust security features, extensive module support, and cross-platform compatibility make it the preferred choice for developers, system administrators, and businesses of all sizes.

Installing Apache Server is a foundational skill for anyone working in web development, DevOps, or IT infrastructure. Whether you’re setting up a personal blog, a corporate intranet, or a production web application, understanding how to install and configure Apache correctly ensures your site loads reliably, scales efficiently, and remains secure. This guide provides a comprehensive, step-by-step walkthrough of installing Apache on the most common operating systems — Linux (Ubuntu and CentOS), macOS, and Windows — along with best practices, essential tools, real-world examples, and answers to frequently asked questions.

By the end of this tutorial, you will not only know how to install Apache, but also how to verify its functionality, optimize its performance, and troubleshoot common issues — giving you the confidence to deploy and manage web content with precision and professionalism.

Step-by-Step Guide

Installing Apache on Ubuntu Linux

Ubuntu, one of the most popular Linux distributions, offers a straightforward method for installing Apache using its package manager, APT. This method ensures you receive updates, security patches, and dependency management automatically.

Begin by opening a terminal window. If you’re using a remote server, connect via SSH. Ensure you have sudo privileges, as most installation commands require administrative access.

First, update your system’s package list to ensure you’re installing the latest available version:

sudo apt update

Next, install the Apache2 package:

sudo apt install apache2

When prompted, press Y and hit Enter to confirm the installation. The system will download and install Apache along with its required dependencies.

Once installed, Apache starts automatically. To verify that the service is running, use the following command:

sudo systemctl status apache2

You should see output indicating that the service is active (running). If it’s not running, start it manually with:

sudo systemctl start apache2

To ensure Apache starts automatically on boot, enable it with:

sudo systemctl enable apache2

Apache’s default document root is located at /var/www/html. To test your installation, open a web browser and navigate to your server’s IP address or domain name (e.g., http://your-server-ip). You should see the default Apache Ubuntu landing page, which displays a message saying “It works!”

If you’re working locally on a machine with a GUI, you can also access http://localhost in your browser.

Installing Apache on CentOS or RHEL

CentOS and Red Hat Enterprise Linux (RHEL) use the YUM or DNF package managers. The process is similar to Ubuntu but with different command syntax.

Connect to your server via SSH and ensure you have root or sudo access. Begin by updating your system:

sudo yum update

On newer versions of CentOS (8+) or RHEL, use DNF instead:

sudo dnf update

Install Apache using the httpd package:

sudo yum install httpd

Or for DNF:

sudo dnf install httpd

After installation, start the Apache service:

sudo systemctl start httpd

Enable it to start at boot:

sudo systemctl enable httpd

Verify the service status:

sudo systemctl status httpd

By default, Apache on CentOS stores web files in /var/www/html. Place an index.html file in this directory to customize your landing page:

echo "<h1>Welcome to My Apache Server on CentOS</h1>" | sudo tee /var/www/html/index.html

Access your server via browser using its public IP address or hostname. You should now see your custom message instead of the default page.

Important: If you’re using a cloud provider like AWS, Google Cloud, or Azure, ensure your firewall or security group allows inbound traffic on port 80 (HTTP) and optionally port 443 (HTTPS).

Installing Apache on macOS

macOS includes Apache as a built-in service, though it’s disabled by default. This makes installation straightforward — you simply need to enable it.

Open Terminal (Applications → Utilities → Terminal). You can start Apache with the following command:

sudo apachectl start

Enter your administrator password when prompted. To verify Apache is running, open a web browser and visit http://localhost. You should see the default Apache page that reads “It works!”

Apache’s document root on macOS is located at /Library/WebServer/Documents. You can place your HTML files here to serve them. For example:

echo "<h1>Hello from macOS Apache</h1>" | sudo tee /Library/WebServer/Documents/index.html

To enable Apache to start automatically at login, run:

sudo apachectl start

Apache on macOS runs under the user _www. If you plan to edit files in the web directory, you may need to adjust permissions:

sudo chmod -R 755 /Library/WebServer/Documents

For development purposes, you can also enable PHP support by uncommenting the appropriate line in the Apache configuration file:

sudo nano /etc/apache2/httpd.conf

Find the line:

LoadModule php_module libexec/apache2/libphp.so

Remove the

to uncomment it, then save and exit (Ctrl+O, Enter, Ctrl+X). Restart Apache:

sudo apachectl restart

Installing Apache on Windows

While Linux is the preferred platform for production Apache deployments, Windows is often used for development environments. Installing Apache on Windows requires downloading the binaries manually.

Visit the official Apache Lounge website at https://www.apachelounge.com/ — this is the most trusted source for Windows binaries. Download the latest version of Apache HTTP Server (e.g., httpd-2.4.xx-win64-VS17.zip).

Extract the ZIP file to a directory with no spaces in the path — C:\Apache24 is recommended. Avoid placing it in C:\Program Files due to potential permission issues.

Open Command Prompt as Administrator. Navigate to the bin folder inside your Apache directory:

cd C:\Apache24\bin

Install Apache as a Windows service:

httpd -k install

Start the service:

httpd -k start

To verify the installation, open your browser and go to http://localhost. You should see the Apache test page.

Apache’s document root on Windows is located at C:\Apache24\htdocs. You can place your HTML files here. For example, create a file named index.html with the content:

<h1>Apache Running on Windows</h1>

If you encounter a port conflict (e.g., Skype or IIS is using port 80), you can change Apache’s listening port by editing C:\Apache24\conf\httpd.conf. Find the line:

Listen 80

Change it to:

Listen 8080

Then access your site via http://localhost:8080. Restart Apache after making changes:

httpd -k restart

Best Practices

Installing Apache is only the first step. Proper configuration and ongoing maintenance are critical to ensure performance, security, and reliability. Below are essential best practices every administrator should follow.

Use a Non-Root User for File Management

Never run Apache as the root user. The web server should operate under a dedicated, low-privilege user account — typically www-data on Ubuntu or apache on CentOS. This minimizes the risk of system compromise if the web server is exploited.

Verify the user and group settings in your Apache configuration file (/etc/apache2/apache2.conf on Ubuntu or /etc/httpd/conf/httpd.conf on CentOS):

User www-data

Group www-data

Ensure your web files are owned by this user or group:

sudo chown -R www-data:www-data /var/www/html

Keep Apache Updated

Regularly update Apache to patch known vulnerabilities. Use your system’s package manager:

On Ubuntu:

sudo apt update && sudo apt upgrade

On CentOS:

sudo yum update httpd

Or with DNF:

sudo dnf update httpd

Subscribe to the Apache Security Announcements mailing list to stay informed about critical updates.

Disable Server Signature and Version Disclosure

By default, Apache reveals its version number and operating system in error pages and HTTP headers. This information can be used by attackers to target known vulnerabilities.

Edit your Apache configuration file and add or modify the following directives:

ServerSignature Off

ServerTokens Prod

ServerSignature Off removes the footer from server-generated pages. ServerTokens Prod limits the Server header to only show “Apache,” hiding the version and OS details.

Restart Apache after making changes:

sudo systemctl restart apache2

Enable ModSecurity and Fail2Ban

ModSecurity is a powerful open-source web application firewall (WAF) that helps protect against common attacks like SQL injection, cross-site scripting (XSS), and file inclusion exploits.

Install ModSecurity on Ubuntu:

sudo apt install libapache2-mod-security2

Then enable it and restart Apache. Configure rules using the OWASP Core Rule Set (CRS) for comprehensive protection.

Fail2Ban monitors log files for suspicious activity and automatically blocks IPs exhibiting malicious behavior. Install it with:

sudo apt install fail2ban

Copy the default configuration and create a custom jail:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Edit jail.local to enable Apache protection and restart Fail2Ban:

sudo systemctl restart fail2ban

Optimize Performance with KeepAlive and Caching

Enable KeepAlive to allow multiple requests over a single TCP connection, reducing latency:

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 2

Use mod_expires and mod_headers to enable browser caching for static assets:

<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType image/jpg "access plus 1 year"

ExpiresByType image/jpeg "access plus 1 year"

ExpiresByType image/gif "access plus 1 year"

ExpiresByType image/png "access plus 1 year"

ExpiresByType text/css "access plus 1 month"

ExpiresByType application/pdf "access plus 1 month"

ExpiresByType application/javascript "access plus 1 month"

ExpiresByType application/x-javascript "access plus 1 month"

ExpiresByType application/x-shockwave-flash "access plus 1 month"

ExpiresByType image/x-icon "access plus 1 year"

</IfModule>

These settings reduce server load and improve user experience by allowing browsers to reuse cached files.

Secure Your Configuration Files

Ensure Apache configuration files are not accessible via the web. Place them outside the document root, and restrict file permissions:

sudo chmod 644 /etc/apache2/apache2.conf

sudo chown root:root /etc/apache2/apache2.conf

Use htpasswd to password-protect sensitive directories:

sudo htpasswd -c /etc/apache2/.htpasswd username

Then add to your virtual host or directory block:

<Directory "/var/www/html/admin">

AuthType Basic

AuthName "Restricted Access"

AuthUserFile /etc/apache2/.htpasswd

Require valid-user

</Directory>

Tools and Resources

Efficiently managing an Apache server requires the right tools and access to reliable documentation. Below is a curated list of essential tools and resources to enhance your workflow.

Essential Command-Line Tools

  • curl – Test HTTP responses and headers: curl -I http://localhost
  • wget – Download files or test server connectivity: wget http://your-domain.com
  • netstat or ss – Check which ports Apache is listening on: ss -tuln | grep :80
  • apachectl – Apache control interface: apachectl configtest to validate configuration syntax
  • tail – Monitor access and error logs in real time: tail -f /var/log/apache2/access.log

Configuration and Debugging Tools

Apache Configuration Validator – Always run apachectl configtest before restarting Apache. This catches syntax errors that could take your server offline.

Apache Bench (ab) – A simple load-testing tool included with Apache. Use it to simulate traffic:

ab -n 1000 -c 10 http://localhost/

This sends 1000 requests with 10 concurrent connections to test performance under load.

Browser Developer Tools – Use Chrome DevTools or Firefox Developer Tools to inspect HTTP headers, load times, and caching behavior.

Documentation and Learning Resources

Monitoring and Logging Tools

Enable detailed logging in Apache by configuring CustomLog and ErrorLog directives in your virtual host configuration:

CustomLog ${APACHE_LOG_DIR}/access.log combined

ErrorLog ${APACHE_LOG_DIR}/error.log

Use tools like GoAccess to generate real-time web analytics from log files:

goaccess /var/log/apache2/access.log -o report.html --log-format=COMBINED

For centralized logging, integrate Apache logs with ELK Stack (Elasticsearch, Logstash, Kibana) or Graylog to monitor multiple servers from a single dashboard.

Automation and DevOps Tools

For scalable deployments, use configuration management tools:

  • Ansible – Automate Apache installation and configuration across multiple servers with playbooks.
  • Docker – Run Apache in a container using the official image: docker run -d -p 80:80 --name apache-server httpd
  • Terraform – Provision Apache servers on cloud platforms like AWS or Azure using infrastructure-as-code.

Real Examples

Understanding how Apache is used in real-world scenarios helps solidify theoretical knowledge. Below are three practical examples of Apache installations and configurations.

Example 1: Hosting a Static Portfolio Website

A web designer wants to host a personal portfolio site using only HTML and CSS. They install Apache on an Ubuntu 22.04 server.

Steps:

  1. Install Apache: sudo apt install apache2
  2. Remove the default index page: sudo rm /var/www/html/index.html
  3. Upload their portfolio files (index.html, styles.css, images/) to /var/www/html/ using SCP or SFTP.
  4. Set proper permissions: sudo chown -R www-data:www-data /var/www/html
  5. Enable compression in /etc/apache2/conf-available/serve-cgi-bin.conf by adding mod_deflate rules.
  6. Test the site: curl -I http://your-domain.com to confirm 200 OK status and content-type headers.

Result: The site loads in under 1.2 seconds with a 98/100 Lighthouse score. No database or backend required.

Example 2: Running a WordPress Site on CentOS

A small business wants to launch a WordPress blog. They install Apache, MySQL, and PHP (LAMP stack) on CentOS 8.

Steps:

  1. Install Apache: sudo dnf install httpd
  2. Install MariaDB: sudo dnf install mariadb-server
  3. Install PHP: sudo dnf install php php-mysqlnd php-gd php-xml
  4. Start and enable services: sudo systemctl start httpd mariadb && sudo systemctl enable httpd mariadb
  5. Download WordPress: wget https://wordpress.org/latest.tar.gz
  6. Extract and move to document root: tar -xzf latest.tar.gz && sudo cp -r wordpress/* /var/www/html/
  7. Set permissions: sudo chown -R apache:apache /var/www/html
  8. Create a MySQL database and user for WordPress.
  9. Access http://your-domain.com to complete the WordPress installation wizard.

Result: The blog is live with SSL enabled via Let’s Encrypt. Apache is configured with mod_pagespeed to accelerate page load times.

Example 3: Reverse Proxy Setup for Node.js App

A developer runs a Node.js application on port 3000 but wants to serve it via Apache on port 80 with SSL termination.

Steps:

  1. Install Apache: sudo apt install apache2
  2. Enable proxy modules: sudo a2enmod proxy proxy_http proxy_balancer
  3. Create a virtual host file: sudo nano /etc/apache2/sites-available/nodeapp.conf
  4. Add the following configuration:
<VirtualHost *:80>

ServerName your-domain.com

ProxyPreserveHost On

ProxyPass / http://localhost:3000/

ProxyPassReverse / http://localhost:3000/

ErrorLog ${APACHE_LOG_DIR}/nodeapp-error.log

CustomLog ${APACHE_LOG_DIR}/nodeapp-access.log combined

</VirtualHost>

  1. Enable the site: sudo a2ensite nodeapp.conf
  2. Restart Apache: sudo systemctl restart apache2
  3. Start the Node.js app: node app.js

Result: Users access http://your-domain.com, but Apache forwards all requests to the Node.js backend. SSL can be added later using Let’s Encrypt with Certbot.

FAQs

Is Apache still relevant in 2024?

Yes, Apache remains highly relevant. While newer servers like Nginx are gaining popularity for high-concurrency scenarios, Apache continues to dominate the market due to its flexibility, extensive module ecosystem, and ease of configuration. Many CMS platforms, including WordPress and Drupal, are optimized for Apache out of the box.

What’s the difference between Apache and Nginx?

Apache uses a process-based model, making it ideal for dynamic content and .htaccess-driven configurations. Nginx uses an event-driven architecture, excelling at serving static files and handling thousands of simultaneous connections. Many setups use Nginx as a reverse proxy in front of Apache to combine the strengths of both.

How do I check if Apache is running?

On Linux: sudo systemctl status apache2 (Ubuntu) or sudo systemctl status httpd (CentOS). On macOS: sudo apachectl status. On Windows: Open Services (services.msc) and look for “Apache2.4” with status “Running.”

Why can’t I access my Apache server from the internet?

Common causes include: firewall blocking port 80, cloud provider security groups not allowing inbound HTTP, incorrect DNS records, or Apache configured to listen only on localhost. Check your server’s public IP, verify firewall rules, and ensure Listen 80 is not commented out or restricted to 127.0.0.1.

Can I run multiple websites on one Apache server?

Yes, using virtual hosts. Each site can have its own document root, domain name, and configuration. Create separate .conf files in /etc/apache2/sites-available/ (Ubuntu) or /etc/httpd/conf.d/ (CentOS), then enable them with a2ensite or by restarting Apache.

How do I enable HTTPS on Apache?

Install Certbot and the Apache plugin: sudo apt install certbot python3-certbot-apache. Then run: sudo certbot --apache. Follow the prompts to obtain and automatically configure an SSL certificate from Let’s Encrypt.

What should I do if Apache fails to start?

Run sudo apachectl configtest to check for syntax errors. Common issues include typos in configuration files, port conflicts, or missing modules. Check error logs at /var/log/apache2/error.log or /var/log/httpd/error_log for specific messages.

Is Apache secure by default?

Apache’s default configuration is reasonably secure, but not hardened. Always disable server signature, update regularly, use strong file permissions, enable a WAF like ModSecurity, and restrict access to sensitive directories. Security is an ongoing process, not a one-time setup.

Can I install Apache on a shared hosting plan?

No. Shared hosting providers manage the web server for you. You typically only have access to upload files via FTP or a control panel like cPanel. Apache installation is only possible on VPS, dedicated, or cloud servers where you have root access.

How much RAM does Apache need?

Apache’s memory usage depends on the number of concurrent connections and modules loaded. A basic static site may use under 100MB. A WordPress site with PHP and database queries may require 512MB–1GB. For high-traffic sites, consider using a hybrid setup with Nginx handling static content and Apache handling dynamic requests.

Conclusion

Installing Apache Server is a fundamental skill that opens the door to managing web content with precision and control. Whether you’re deploying a simple static site or a complex web application, understanding how to install, configure, and secure Apache ensures your server performs reliably under real-world conditions.

This guide has walked you through installing Apache on Ubuntu, CentOS, macOS, and Windows — each with their own nuances and best practices. You’ve learned how to verify functionality, optimize performance, enhance security, and troubleshoot common issues. Real-world examples demonstrated practical applications, from static portfolios to reverse proxy setups, reinforcing the versatility of Apache in modern web infrastructure.

Remember: Installation is just the beginning. Regular updates, logging, monitoring, and proactive security measures are what separate functional servers from resilient, production-grade systems. Use the tools and resources outlined here to deepen your expertise and stay ahead of evolving web standards.

As you continue your journey in web development and system administration, Apache will remain a trusted companion. Its longevity, community support, and adaptability make it more than just a server — it’s a cornerstone of the open web. Master it, and you master the foundation of how the internet delivers content to billions.