How to Set Up a Web Server on Linux Systems

How to Set Up a Web Server on Linux Systems

Setting up a web server on Linux systems is an essential skill for developers, system administrators, and anyone interested in hosting websites. This guide covers step-by-step instructions on how to set up a web server, specifically using Apache, one of the most widely used web server software.

Prerequisites

Before beginning the installation, ensure you have:

  • A Linux-based operating system (Ubuntu, CentOS, or Debian)
  • Root or sudo access to the server
  • Basic knowledge of the command line interface

Step 1: Update Your System

Begin by updating your system's package index. Open your terminal and run the following command:

sudo apt update && sudo apt upgrade

This ensures all your software is up to date, which can help prevent compatibility issues.

Step 2: Install Apache

To install the Apache web server, use the following command:

sudo apt install apache2

For CentOS, run:

sudo yum install httpd

Once the installation completes, Apache should automatically start. You can verify that Apache is running by navigating to your server's IP address in a web browser. You should see the default Apache welcome page.

Step 3: Configure Firewall Settings

To allow traffic to your web server, you will need to adjust your firewall settings. If you are using UFW, the Uncomplicated Firewall, you can enable HTTP and HTTPS traffic with the following commands:

sudo ufw allow 'Apache'

For CentOS, adjust your firewall settings with:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Step 4: Test Apache Installation

After configuring your firewall, you can further test if Apache is running. Use:

systemctl status apache2

For CentOS, use:

systemctl status httpd

You should see that the service is active and running.

Step 5: Create a Virtual Host (Optional)

If you want to host multiple websites on the same server, you can set up virtual hosts. Begin by creating a new configuration file in the Apache sites-available directory:

sudo nano /etc/apache2/sites-available/example.com.conf

Insert the following configuration, replacing "example.com" with your domain name:


    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Save and exit the file. Then, create the document root directory:

sudo mkdir -p /var/www/example.com/public_html

Set the correct permissions for the directory:

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com

Step 6: Enable the New Virtual Host

To enable the new virtual host, run the following command:

sudo a2ensite example.com.conf

Finally, restart Apache to apply the changes:

sudo systemctl restart apache2

Your new site should now be live! Access it by entering your domain name in the web browser.

Step 7: Additional Configuration (Optional)

You may want to enable HTTPS for your website to secure the data transmitted between the server and users. Let's Encrypt provides free SSL certificates that can be easily installed using Certbot.

To install Certbot and the Apache plugin, run:

sudo apt install python3-certbot-apache

Then, run Certbot to automatically obtain and configure your SSL certificate:

sudo certbot --apache

Follow the prompts, and you'll have HTTPS configured in no time.