Apache Installed But Can't Reach localhost – Fix

Linux & Unix Beginner 👁 11 views 📅 Jun 25, 2026

You installed Apache on Linux but localhost won't load. First check if it's running, then fix port or firewall. I'll show you the exact steps.

You just installed Apache on your Linux box, typed http://localhost in your browser, and got nothing but a spinning circle or a 'connection refused' error. Frustrating, right? Don't worry — this is one of the most common problems after an Apache install. The fix is usually simple, and I'll walk you through it step by step.

Step 1: Check if Apache is Actually Running

First things first. Apache might not be running at all. Here's how you check:

  1. Open a terminal.
  2. Type:
    sudo systemctl status apache2
    (on Debian/Ubuntu) or
    sudo systemctl status httpd
    (on CentOS/RHEL/Fedora).
  3. Press Enter.

After that command, you should see something like Active: active (running) in green or white. If you see inactive (dead) or failed, that's your problem. Let's fix it.

To start Apache, run:

sudo systemctl start apache2

Then check status again. After starting, you should see 'active (running)'. If it still shows dead, there's a deeper problem — check the error log: sudo journalctl -u apache2 --no-pager | tail -20.

Step 2: Verify Apache is Listening on Port 80

Even if Apache is running, it might not be listening on the right port. Let's check:

  1. Run:
    sudo lsof -i :80
    or
    sudo ss -tlnp | grep :80
  2. Look for a line with apache2 or httpd and LISTEN.

If you see nothing, Apache isn't listening. That could mean it's bound to a different IP (like 127.0.0.1 instead of 0.0.0.0) or it crashed. Check the Apache config file:

sudo grep -i 'listen' /etc/apache2/ports.conf

You should see Listen 80. If you see Listen 8080, that's fine too — just use http://localhost:8080 in your browser. If the file is missing or wrong, edit it with sudo nano /etc/apache2/ports.conf and add Listen 80.

Step 3: Check the Firewall

This one trips up a lot of people. Your firewall might be blocking port 80. Here's how to check and fix it:

  1. Check if ufw (Uncomplicated Firewall) is active:
    sudo ufw status
  2. If it says Status: active, you need to allow Apache:
    sudo ufw allow 'Apache Full'
  3. Reload ufw:
    sudo ufw reload

After reload, run sudo ufw status again. You should see rules like Apache Full with ALLOW next to it. Now try localhost in your browser again.

If you're using firewalld instead of ufw (common on CentOS/RHEL), use:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

Step 4: Check the Default Index File

Sometimes Apache runs fine, but there's no index file to show. Apache looks for index.html or index.php in the document root (usually /var/www/html/). If that folder is empty, you'll get a blank page or a 403 Forbidden error.

  1. Go to the document root: cd /var/www/html
  2. List files: ls -la
  3. If empty, create a simple test file:
    sudo nano index.html
    and paste this:
    <html><body><h1>Apache Works!</h1></body></html>
  4. Save and exit (Ctrl+X, then Y, then Enter).

Now reload your browser. You should see the 'Apache Works!' heading.

Why This Happens

Apache is a web server — it's just a program that waits for requests. When you install it, you still need to start it, open the firewall, and make sure the files it serves actually exist. Most Linux distros don't start Apache automatically after install (Ubuntu does, but CentOS doesn't). The firewall is often the hidden culprit — it blocks port 80 by default on many systems. So you have to explicitly allow Apache traffic.

Another reason: Apache might be bound to IPv6 only, while your browser tries IPv4. Check with sudo ss -tlnp | grep apache. If you see tcp6 but no tcp, that's the issue. Edit /etc/apache2/ports.conf and add Listen 0.0.0.0:80 to force IPv4.

Less Common Variations

Apache Installed via Package Manager but No Service Found

On some minimal distros (like Alpine Linux), Apache might be installed but not added as a service. Check with apachectl -S to see configuration. Start it manually: sudo apachectl start.

Port 80 Already in Use

If another service (like nginx or a web server from Docker) is using port 80, Apache can't bind to it. Check with sudo lsof -i :80. If you see another process, stop it: sudo systemctl stop nginx. Then start Apache.

SELinux Blocking Apache (RHEL/CentOS/Fedora)

SELinux can block Apache even if the firewall is open. Check with sudo getenforce. If it says Enforcing, try: sudo setsebool -P httpd_can_network_connect 1. Then restart Apache. This is rare but happens when Apache tries to connect to external resources (like a proxy).

Wrong VirtualHost Configuration

If you have multiple sites configured, Apache might be listening on a different port or domain. Check sudo apachectl -S to list all virtual hosts. Make sure localhost or 127.0.0.1 is in the list. If not, check your /etc/apache2/sites-available/ files.

Prevention for Next Time

To avoid this headache in the future, do these three things right after installing Apache:

  1. Start and enable Apache immediately: sudo systemctl enable --now apache2 (or httpd). This starts it now and makes it auto-start on boot.
  2. Open the firewall before testing: Run sudo ufw allow Apache Full (or the firewalld equivalent) right after install.
  3. Create a test index file: echo "<h1>Test</h1>" | sudo tee /var/www/html/index.html

That's it. Three commands. Then http://localhost works every time. No guesswork.

Was this solution helpful?