How to Troubleshoot Apache not Serving Web Pages?

Where necessary, you may need to have access to a VPS server so you can follow how to implement the steps in this article.  You can get a cheaper VPS Server from Contabo with 4vCPU cores, 8GM RAM, and 32TB Bandwidth for less than $5.50 per month. Get this deal here now

Table of Contents

Cloud VPS S

$5.50 Monthly
  • 4 vCPU Cores | 8GB RAM


$15.50 Monthly
  • 6 vCPU Cores | 16GB RAM


$17.50 Monthly
  • 8 vCPU Cores | 24GB RAM

When your web server stops delivering content to visitors, it can be a cause for concern. In this article, we will explore the various reasons Apache might fail to serve web pages and provide detailed troubleshooting steps to help you identify and resolve the issue.

Check Apache’s Status

The first step in troubleshooting any web server issue is to verify whether Apache is running. Open a terminal window and enter the following command:

sudo systemctl status apache2

This command will output the status of the Apache service. If the service is running, you will see the following output:

apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-11-05 04:14:35 PST; 5s ago
Process: 2375 ExecStart=/usr/sbin/apache2ctl -D FOREGROUND (code=exited, status=0/SUCCESS)
Main PID: 2375 (apache2)
Tasks: 37 (<em>limit</em>: 4915)
Memory: 2.9M
CGroup: /system.slice/apache2.service
└─2375 /usr/sbin/apache2ctl -D FOREGROUND

If the service is not running, you can start it using the following command:

sudo systemctl start apache2

Review Apache Configuration Files

Apache’s configuration files, typically located in the /etc/apache2/ directory, govern how the server behaves. Typos or misconfigurations in these files can prevent Apache from serving web pages. Use the following commands to check the syntax of your configuration files:

sudo apache2ctl configtest

The above command will identify any syntax errors in your configuration files. If errors are found, review the specific file and line number mentioned in the output to correct the issue.

However, if you need to inspect or fix some issues in your Apache configuration, you can open the file by running the following command.

sudo nano /etc/apache2/apache2.conf

The above command will open the Apache configuration file using nano text editor in Linux

Check the defined ports

It’s important to cross-check in the Apache configuration file that ports 80 & 443 are defined. Look for the following lines. If they’re not there, you have to add them as Apache requires these ports to work

Listen 80
Listen 443

Check the ServerName Directive

The ServerName directive in Apache is a crucial configuration element that defines the server’s identity and hostname.

Here’s an example of how ServerName is used in a VirtualHost configuration:

<VirtualHost *:80>
    DocumentRoot /var/www/example
    # ... other configuration settings ...

You will need to replace with your actual domain name. You can also use an IP address instead of a domain name in the ServerName directive in Apache. The ServerName directive accepts either a domain name or an IP address as its argument. Here’s an example:

<VirtualHost *:80>
    DocumentRoot /var/www/example
    # ... other configuration settings ...

Check File and Directory Permissions

Apache requires appropriate permissions to access and serve files. Ensure that the files and directories you want to serve have the correct permissions. Use the ls -l command to view the permissions of your files and directories:

ls -l /path/to/your/web/files

Directories should have the execute permission (x) for Apache to access files within them. You can set the correct permissions using the chmod command:

sudo chmod -R 755 /path/to/your/web/files

By default, Apache looks for website files in the **DocumentRoot** directory. This is typically:

  • /var/www/html on Debian and Ubuntu
  • /var/www on RedHat and CentOS
  • /usr/local/apache2/htdocs on macOS with Homebrew

However, this can be changed in the Apache configuration files.

Apache can also be configured to serve different websites from different directories using virtual hosts. These can be defined in files within the **sites-available** directory and enabled in the **sites-enabled** directory. Each virtual host can specify its own **DocumentRoot** for the website it serves.

Regardless of where your website files are located, you must make sure that you’ve defined the right DocumentRoot directory path in the virtual host file as shown below:

<VirtualHost *:80>
    DocumentRoot /var/www/example
    # ... other configuration settings ...

Assign the Apache web directory to the www-data user and group

The www-data user is used by web servers such as Apache and Nginx to run processes and access files. It’s a low-privilege account designed for security purposes, preventing web server vulnerabilities from compromising the entire system.

On the other hand, the www-data group provides a way to manage permissions for multiple users involved in web server operations. Adding users to the www-data group grants them the same access as the www-data user, allowing them to edit and manage content.

Assuming you’re running a Debian-based system like Ubuntu, then the default directory is /var/www. So, the following command will make it possible to assign the Apache web directory to the www-data user and group

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

The -R flag tells chown to recursively change ownership of all files and subdirectories within /var/www.

RECOMMENDED READING: How to easily Create and Add Users in Linux

Verify DNS and Firewall Settings

You need to first ensure that your domain’s DNS records are correctly configured to point to the server’s IP address. To point your domain (let’s assume it’s to the IP address, you need to configure the appropriate DNS records. Here’s how you can set up the necessary DNS records for your domain:

Augacomp.com147.123.214.117[Mail Server IP]
TXT[TXT Record Value]

In the table above:

  • Type: Specifies the type of DNS record. In this case, you are creating an A record, which stands for Address record. A records are used to map domain names (like to IPv4 addresses (like
  • Name: Represents the subdomain or domain name itself. When set to @, it refers to the root domain ( in this case). If you want to create records for specific subdomains like, you would replace @ with www.
  • Value: Indicates the IP address the domain or subdomain should point to. In your case, it’s

RECOMMENDED READING: How to Point a Domain Name from Namecheap to Contabo VPS

Allow appropriate firewall ports

Additionally, check your server’s firewall settings to ensure that traffic on port 80 (HTTP) and/or port 443 (HTTPS) is allowed. You can use the ufw (Uncomplicated Firewall) tool on Ubuntu-based systems:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

RECOMMENDED READING: How to install and configure UFW firewall on Ubuntu Linux

Examine Apache Logs

Apache logs provide valuable information about server activity and errors. The two main log files are error.log and access.log, usually located in the /var/log/apache2/ directory. Examine the error log for any clues about what might be causing the issue:

tail -f /var/log/apache2/error.log

This command allows you to view the last few lines of the error log in real-time. Look for error messages that could indicate the source of the problem.

Check Server Resources

Insufficient server resources, such as low memory or high CPU usage, can lead to Apache not serving web pages. Use the top or htop command to monitor the server’s resource usage. If your server is consistently running out of resources, consider upgrading your hosting plan or optimizing your web application to reduce resource consumption.

Use the htop tool to check for server resources on Linux

htop is a powerful tool for monitoring system resources on Ubuntu servers. It offers a more interactive and user-friendly interface than the traditional top command. Here’s how to use htop to check your server’s resources:

htop is not installed by default on Ubuntu. You can install it using the following command:

sudo apt update && sudo apt install htop

Once installed, you can launch htop by typing the following command in your terminal:


You will be able to see the resource consumption as shown below in the image:


Troubleshooting Apache when it fails to serve web pages can be a complex task, but by following these steps and paying attention to detail, you can identify and resolve the issue efficiently. Remember to check Apache’s status, review configuration files, verify file and directory permissions, examine DNS and firewall settings, analyze Apache logs, and monitor server resources. With patience and persistence, you can ensure your Apache web server operates smoothly, delivering content to your visitors without interruptions.

More Apache-related articles to explore

Hire us to handle what you want

Hire us through our Fiverr Profile and leave all the complicated & technical stuff to us. Here are some of the things we can do for you:

  • Website migration, troubleshooting, and maintenance.
  • Server & application deployment, scaling, troubleshooting, and maintenance
  • Deployment of Kubernetes, Docker, Cloudron, Ant Media, Apache, Nginx,  OpenVPN, cPanel, WHMCS, WordPress, and more
  • Everything you need on AWS, IBM Cloud, GCP, Azure, Oracle Cloud, Alibaba Cloud, Linode, Contabo, DigitalOcean, Ionos, Vultr, GoDaddy, HostGator, Namecheap, DreamHost, and more.

We will design, configure, deploy, or troubleshoot anything you want. Starting from $10, we will get your job done in the shortest time possible. Your payment is safe with Fiverr as we will only be paid once your project is completed.