install http apache web server
install http apache web server

How to Install and Configure Apache2 on Ubuntu 24.04: A Comprehensive Guide

Learn how to install and configure Apache2 on Ubuntu in this step-by-step guide. Get Apache2 up and running for your website today!

Introduction

Apache2, one of the most popular web servers globally, powers a large portion of the websites on the internet. Known for its flexibility, ease of use, and extensive community support, Apache2 is the go-to choice for hosting websites and applications. In this guide, we’ll walk you through how to install and configure Apache2 on Ubuntu, ensuring that your web server is ready for traffic in no time.

Whether you’re a seasoned developer or a newcomer, this guide covers everything you need to know to get started with Apache2.

Apache2 is an open-source HTTP server software developed by the Apache Software Foundation. It supports a wide range of functionalities through modules, including security, performance optimization, URL redirection, and authentication. Apache2’s modular design allows users to tailor their web server configuration, making it suitable for small personal websites to large, complex enterprise applications.

Installing Apache2 On Ubuntu 24.04

 

Step 1: Update Ubuntu Package Index

Before installing Apache2, it’s essential to update your system to ensure all the latest packages and dependencies are in place.

$ sudo apt update

This command will synchronize your package index with the official Ubuntu repositories.

Step 2: Install Apache2 on Ubuntu

Once your package index is updated, you can proceed with installing Apache2. Use the following command:

$ sudo apt install apache2 -y

Output :

ramansah@dev02:~$ sudo apt install apache2 -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils libapr1t64 libaprutil1-dbd-sqlite3 libaprutil1-ldap
libaprutil1t64
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapr1t64 libaprutil1-dbd-sqlite3 libaprutil1-ldap
libaprutil1t64
0 upgraded, 8 newly installed, 0 to remove and 194 not upgraded.
Need to get 1,899 kB of archives.
After this operation, 7,455 kB of additional disk space will be used.
Get:1 http://id.archive.ubuntu.com/ubuntu noble/main amd64 libapr1t64 amd64 1.7.2-3.1build2 [107 kB]
Get:2 http://id.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1t64 amd64 1.6.3-1.1ubuntu7 [91.9 kB]
Get:3 http://id.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1-dbd-sqlite3 amd64 1.6.3-1.1ubuntu7 [11.2 kB]
Get:4 http://id.archive.ubuntu.com/ubuntu noble/main amd64 libaprutil1-ldap amd64 1.6.3-1.1ubuntu7 [9,116 B]
Get:5 http://id.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-bin amd64 2.4.58-1ubuntu8.4 [1,329 kB]
Get:6 http://id.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-data all 2.4.58-1ubuntu8.4 [163 kB]
Get:7 http://id.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2-utils amd64 2.4.58-1ubuntu8.4 [97.1 kB]
Get:8 http://id.archive.ubuntu.com/ubuntu noble-updates/main amd64 apache2 amd64 2.4.58-1ubuntu8.4 [90.2 kB]
Fetched 1,899 kB in 3s (646 kB/s) 
Selecting previously unselected package libapr1t64:amd64.
(Reading database ... 218752 files and directories currently installed.)
Preparing to unpack .../0-libapr1t64_1.7.2-3.1build2_amd64.deb ...
Unpacking libapr1t64:amd64 (1.7.2-3.1build2) ...
Selecting previously unselected package libaprutil1t64:amd64.
Preparing to unpack .../1-libaprutil1t64_1.6.3-1.1ubuntu7_amd64.deb ...
Unpacking libaprutil1t64:amd64 (1.6.3-1.1ubuntu7) ...
Selecting previously unselected package libaprutil1-dbd-sqlite3:amd64.
Preparing to unpack .../2-libaprutil1-dbd-sqlite3_1.6.3-1.1ubuntu7_amd64.deb ...
Unpacking libaprutil1-dbd-sqlite3:amd64 (1.6.3-1.1ubuntu7) ...
Selecting previously unselected package libaprutil1-ldap:amd64.
Preparing to unpack .../3-libaprutil1-ldap_1.6.3-1.1ubuntu7_amd64.deb ...
Unpacking libaprutil1-ldap:amd64 (1.6.3-1.1ubuntu7) ...
Selecting previously unselected package apache2-bin.
Preparing to unpack .../4-apache2-bin_2.4.58-1ubuntu8.4_amd64.deb ...
Unpacking apache2-bin (2.4.58-1ubuntu8.4) ...
Selecting previously unselected package apache2-data.
Preparing to unpack .../5-apache2-data_2.4.58-1ubuntu8.4_all.deb ...
Unpacking apache2-data (2.4.58-1ubuntu8.4) ...
Selecting previously unselected package apache2-utils.
Preparing to unpack .../6-apache2-utils_2.4.58-1ubuntu8.4_amd64.deb ...
Unpacking apache2-utils (2.4.58-1ubuntu8.4) ...
Selecting previously unselected package apache2.
Preparing to unpack .../7-apache2_2.4.58-1ubuntu8.4_amd64.deb ...
Unpacking apache2 (2.4.58-1ubuntu8.4) ...
Setting up libapr1t64:amd64 (1.7.2-3.1build2) ...
Setting up apache2-data (2.4.58-1ubuntu8.4) ...
Setting up libaprutil1t64:amd64 (1.6.3-1.1ubuntu7) ...
Setting up libaprutil1-ldap:amd64 (1.6.3-1.1ubuntu7) ...
Setting up libaprutil1-dbd-sqlite3:amd64 (1.6.3-1.1ubuntu7) ...
Setting up apache2-utils (2.4.58-1ubuntu8.4) ...
Setting up apache2-bin (2.4.58-1ubuntu8.4) ...
Setting up apache2 (2.4.58-1ubuntu8.4) ...
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.
Enabling module access_compat.
Enabling module authn_file.
Enabling module authz_user.
Enabling module alias.
Enabling module dir.
Enabling module autoindex.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module filter.
Enabling module deflate.
Enabling module status.
Enabling module reqtimeout.
Enabling conf charset.
Enabling conf localized-error-pages.
Enabling conf other-vhosts-access-log.
Enabling conf security.
Enabling conf serve-cgi-bin.
Enabling site 000-default.
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /usr/lib/systemd/system/apache2
.service.
Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /usr/lib/systemd/sy
stem/apache-htcacheclean.service.
Processing triggers for ufw (0.36.2-6) ...
Processing triggers for man-db (2.12.0-4build2) ...
Processing triggers for libc-bin (2.39-0ubuntu8.3) ...

Then view the Apache web server version by submitting command line : apachectl -v, as shown below :

ramansah@dev02:~$ apachectl -v
Server version: Apache/2.4.58 (Ubuntu)
Server built: 2024-07-17T18:55:23

Step 3: Manage Apache2 Service

o ensure that Apache2 is running properly, you can check its status with the following command:

$ sudo systemctl status apache2

You should see a status indicating that the Apache2 service is active and running. Here are some useful commands for managing the Apache2 service:

  • Start Apache2: sudo systemctl start apache2
  • Stop Apache2: sudo systemctl stop apache2
  • Restart Apache2: sudo systemctl restart apache2
  • Enable Apache2 at Boot: sudo systemctl enable apache2
  • Disable Apache2 at Boot: sudo systemctl disable apache2
ramansah@dev02:~$ sudo systemctl enable apache2
Synchronizing state of apache2.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable apache2
ramansah@dev02:~$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-09-12 10:00:22 WIB; 6min ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 4592 (apache2)
Tasks: 55 (limit: 4558)
Memory: 6.1M (peak: 6.3M)
CPU: 130ms
CGroup: /system.slice/apache2.service
├─4592 /usr/sbin/apache2 -k start
├─4598 /usr/sbin/apache2 -k start
└─4599 /usr/sbin/apache2 -k start

Sep 12 10:00:22 dev02.bckinfo systemd[1]: Starting apache2.service - The Apache HTTP Server...
Sep 12 10:00:22 dev02.bckinfo apachectl[4585]: AH00558: apache2: Could not reliably determine the server's

Step 4: Verify Apache2 Installation

After installation, you can verify that Apache2 is correctly installed by opening a web browser and navigating to your server’s IP address or localhost if you are running it locally. On this case we will navigate our URL to http://dev02.bckinfo as shown below :

If Apache2 is working, you should see the default Ubuntu Apache2 welcome page, which confirms that the web server is active.

Step 5: Configure Apache2 Virtual Hosts

Apache2 uses a concept called Virtual Hosts to allow you to host multiple websites on a single server. Each site will have its own configuration file, typically stored in /etc/apache2/sites-available/.

Create a Virtual Host Configuration

To create a new virtual host file for your domain, copy the default configuration file and modify it for your domain: /etc/apache2/sites-available/website.conf. Here is the example on our dev environment.

ramansah@dev02:~$ sudo vi /etc/apache2/sites-available/website.conf

Modify the contents as follows:

<VirtualHost *:80>
   ServerAdmin webmaster@example.com
   ServerName app01.bckinfo.com

   DocumentRoot /var/www/html/website
   DirectoryIndex index.html index.php

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   <Directory /var/www/html/website>
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>
</VirtualHost>
ramansah@dev02:~$ sudo a2dissite 000-default
Site 000-default disabled.
To activate the new configuration, you need to run:
systemctl reload apache2
ramansah@dev02:~$ sudo a2ensite website
Enabling site website.
To activate the new configuration, you need to run:
systemctl reload apache2
ramansah@dev02:~$ sudo apachectl configtest
AH00112: Warning: DocumentRoot [/var/www/html/website] does not exist
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using dev02.bckinfo. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Create a new sample HTML application index.html file in the web root directory.

ramansah@dev02:~$ sudo mkdir -p /var/www/html/website
ramansah@dev02:~$ sudo vi /var/www/html/website/index.html

Add the following contents to the file.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BCKINFO - Apache Web Server</title>
</head>
<body>
<h1>This is from bckinfo.com</h1>
</body>
</html>
~ 
~ 
~ 
~ 
:wq!
ramansah@dev02:~$ sudo chown -R www-data:www-data /var/www/html/website
ramansah@dev02:~$ sudo systemctl restart apache2

Step 6: Adjust Firewall Settings

If you are using UFW (Uncomplicated Firewall) to manage firewall settings, you’ll need to allow Apache2 traffic through the firewall.

To allow web traffic, run the following command:

ramansah@dev02:~$ sudo ufw allow 'Apache Full'
Skipping adding existing rule
Skipping adding existing rule (v6)


ramansah@dev02:~$ sudo ufw reload
Firewall reloaded

ramansah@dev02:~$ sudo ufw status
Status: active

Access your virtual host domain dev02.bcinfo in a new web browser window and verify that Apache serves your HTML application with a This is from bckfinfo.com message.

Conclusion

Apache2 is a powerful and versatile web server that is well-suited for hosting websites, applications, and more. By following the steps in this guide, you should have a fully functional Apache2 web server running on your Ubuntu system, ready to host your website.

Whether you’re running a small blog or a large-scale web application, Apache2’s flexibility and reliability make it an excellent choice for your web hosting needs.

(Visited 34 times, 1 visits today)

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *