Photo by John Duncan on Unsplash

Setting up a website might be easier than you think. Using Apache is one of the simplest ways to go about it. For those not familiar with it, Apache is a web server software package available on Linux systems. It is one of the most popular web servers on the market, and for good reason. It’s free and completely open-source. But it’s also feature-rich, simple to set up, and easy to work with. Let’s delve into how to set up your website using Apache.

## Installing Apache

First of all, if you don’t already have Apache on your machine, you’ll obviously need to install it. To install apache2 on a Linux machine, run these two commands:

sudo apt update
sudo apt install apache2


Running these commands will automatically install all the required packages for you. If you made it through the installation process without encountering any errors, your server should be ready. To test its readiness, use your browser to go to this site: http://LOCALHOST or http://YOUR_IP_ADDRESS. You should see a page that looks like this:

## Important Files And Directories

Now that you have Apache installed, let’s review some of the more important files and directories of an Apache server!

### Content directory

Apache comes with a basic site, the “It works!” page above. It is located at /var/www/html. This directory contains actual web content that you can serve to your users. If you are only hosting one domain on your server, you can add content straight into this directory.

### Server configuration directory

All the files that configure Apache are located in /etc/apache2. The main configuration file is /etc/apache2/apache2.conf. It contains some global configurations for your server and is responsible for loading other configuration files. A file named /etc/apache2/ports.conf specifies the ports that Apache will listen on. By default, Apache listens on port 80, and also on port 443 if SSL is enabled. A subdirectory callled /etc/apache2/sites-available/ stores the site-specific configuration files for each virtual host. That’s different than the /etc/apache2/sites-enabled/ subdirectory, which stores sites that have been enabled. When a site is enabled, Apache will read the files in this directory to complete that site’s configuration.

### Server logs directory

Apache stores its access logs in /var/log/apache2/access.log and its error logs in /var/log/apache2/error.log.

## Some Basic Commands

The following are some basic commands that you will need in order to manage your server. You can enable your Apache site by using the command a2ensite (Apache 2 enable site) and disable it by using a2dissite (Apache 2 disable site).

sudo a2ensite YOUR_DOMAIN.conf
sudo a2dissite YOUR_DOMAIN.conf


YOUR_DOMAIN is the name of your site’s virtual host configuration file, minus the “.conf” extension. We’ll see an example of this below. To start or stop your Apache server, you can run:

sudo systemctl start apache2
sudo systemctl stop apache2


You can also restart your server with one command using. To do so, use:

sudo systemctl restart apache2


Sometimes, when making configuration changes, you don’t want to spend the time and effort it takes to restart your server. In these situations, instead of restarting the server, you can try reloading it by using the following command.

sudo systemctl reload apache2


## Setting Up Virtual Hosts

What if you need to host multiple websites on the same server? Virtual hosts enable you do that. It’s a method for allowing multiple domain names to use the same physical server and share computational resources. If you’ll be hosting multiple sites on the same server, it’s a good idea to not store all your web content in the same location (/var/www/html). Instead, you should create a separate directory for each of your domains. Let’s say that we are creating a site with the domain name “mysite.com”.

sudo mkdir /var/www/mysite.com


You can then fill web content for that domain in the domain-specific directory. The following command creates an empty index file for your site.

sudo touch /var/www/mysite.com/index.html


The contents of that index file could be as simple as the following:

<html>
<body>
<h1>This is your index page :) </h1>
</body>
</html>


For Apache to serve your content, it will need configuration files for this specific domain. So you need to create a configuration file named “YOUR_DOMAIN.conf” in the “sites-available” directory. You can do so using the following command:

sudo touch /etc/apache2/sites-available/mysite.com.conf


Apache comes with a default configuration file located at /etc/apache2/sites-available/000-default.conf. You can copy the contents over and make modifications as necessary.

<VirtualHost *:80>
ServerName mysite.com
DocumentRoot /var/www/mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


sudo a2ensite mysite.com.conf


It’s also a good idea to disable the default site that came with Apache. Use this command to do that:

sudo a2dissite 000-default.conf


Finally, check for configuration errors and reload Apache to finalize your changes.

sudo apache2ctl configtest