CentOSRHEL Based

How To Setup Virtual Host Apache on CentOS Stream 10

Setup Virtual Host Apache on CentOS Stream 10

Virtual hosting is a method of hosting multiple domain names on a single server. It allows one server to share its resources, such as memory and CPU, among multiple websites, making it cost-effective and efficient. Using Apache virtual hosts on CentOS Stream 10 can significantly streamline web hosting management. You’ll enhance your server’s capabilities, ensuring optimal performance and organization. This comprehensive guide will walk you through the process of setting up Apache virtual hosts on CentOS Stream 10, complete with detailed instructions and best practices.

Introduction

Virtual hosting is a crucial technology for hosting multiple websites on a single server. With Apache virtual hosts, you can host multiple domains or subdomains on a single CentOS Stream 10 server. This method is economical, as it maximizes resource utilization. Moreover, it provides a structured approach to managing multiple websites.

This guide will provide you with step-by-step instructions on how to set up Apache virtual hosts on CentOS Stream 10. We will cover everything from initial setup to advanced configurations, ensuring you have a solid understanding of the process. Virtual hosting offers numerous benefits, including improved server efficiency, simplified management, and cost savings. It’s an essential skill for any system administrator or web developer.

Benefits of Using Apache Virtual Hosts

  • Cost Efficiency: Host multiple websites on a single server, reducing hardware costs.
  • Simplified Management: Manage multiple sites from a single server instance.
  • Resource Optimization: Efficiently allocate server resources among different websites.
  • Scalability: Easily add or remove websites as needed.
  • Organization: Keep website files and configurations separate and organized.

Why CentOS Stream 10?

CentOS Stream 10 is a robust and reliable Linux distribution, making it an excellent choice for hosting web applications. It offers a stable environment, regular updates, and strong community support. CentOS Stream 10 is designed for production environments. It provides the stability and performance required for hosting multiple websites. Its compatibility with Apache makes it an ideal platform for implementing virtual hosts.

Prerequisites

Before you begin, ensure that you have the following prerequisites in place. These are essential for a smooth and successful setup of Apache virtual hosts.

System Requirements

  • A running installation of CentOS Stream 10.
  • Root or sudo privileges to execute administrative commands.
  • Basic knowledge of command-line operations.

Having these prerequisites will help you to follow the steps outlined in this guide more effectively.

Initial Setup

The initial setup involves updating your system and installing the Apache HTTP server. These steps are crucial for ensuring that your system is ready for the virtual host configuration.

System Update

First, update the package repositories to ensure you have the latest packages. This step is vital for maintaining system security and stability. Use the following command:

sudo dnf update -y

Next, install any required dependencies. These dependencies are necessary for Apache to function correctly. Use the following command:

sudo dnf install -y epel-release

Apache Installation

Install the Apache HTTP server using the following command:

sudo dnf install httpd -y

Once the installation is complete, start the Apache service and enable it to start on boot:

sudo systemctl start httpd
sudo systemctl enable httpd

Verify that Apache is running by accessing your server’s IP address in a web browser. You should see the Apache test page. Alternatively, use the following command:

sudo systemctl status httpd

Configuring Apache Virtual Hosts

Configuring Apache virtual hosts involves setting up the directory structure for your websites and creating the virtual host configuration files. This is where you define how Apache should handle requests for different domains.

Directory Structure

Create document root directories for each website you plan to host. These directories will contain the website files. A common practice is to create these directories under /var/www/. For example, if you are hosting example.com and test.com, you might create the following directories:

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html

Set the proper permissions and ownership for these directories. This ensures that Apache can access the website files:

sudo chown -R apache:apache /var/www/example.com/html
sudo chown -R apache:apache /var/www/test.com/html
sudo chmod -R 755 /var/www/example.com
sudo chmod -R 755 /var/www/test.com

Organize your website files within these directories. Place the HTML, CSS, JavaScript, and other assets in their respective directories.

Virtual Host Configuration Files

Create virtual host configuration files in the /etc/httpd/conf.d/ directory. These files define the settings for each virtual host. It’s a good practice to name the configuration files after the domain names they serve. For example, create example.com.conf and test.com.conf:

sudo nano /etc/httpd/conf.d/example.com.conf
sudo nano /etc/httpd/conf.d/test.com.conf

A basic virtual host configuration file includes directives such as ServerName, ServerAlias, DocumentRoot, and ErrorLog. Here’s an explanation of some essential directives:

  • ServerName: Specifies the primary domain name for the virtual host.
  • ServerAlias: Specifies any additional domain names or subdomains that should be served by this virtual host.
  • DocumentRoot: Defines the directory from which Apache will serve the website files.
  • ErrorLog: Specifies the location where Apache will store error logs for the virtual host.
  • CustomLog: Specifies the location where Apache will store access logs for the virtual host.

Creating Virtual Host Configurations

Now, let’s create the virtual host configurations for example.com and test.com. These configurations will tell Apache how to handle requests for these domains.

Basic Virtual Host Template

Open the example.com.conf file and add the following configuration:

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/example.com/html
  ErrorLog /var/www/example.com/error.log
  CustomLog /var/www/example.com/access.log combined

  <Directory /var/www/example.com/html>
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
  </Directory>
 </VirtualHost>

Explanation of the directives:

  • <VirtualHost *:80>: Defines a virtual host that listens on port 80 (HTTP).
  • ServerName example.com: Sets the primary domain name.
  • ServerAlias www.example.com: Sets an alias for the domain (optional).
  • DocumentRoot /var/www/example.com/html: Specifies the directory containing the website files.
  • ErrorLog /var/www/example.com/error.log: Sets the path for the error log file.
  • CustomLog /var/www/example.com/access.log combined: Sets the path for the access log file.
  • <Directory /var/www/example.com/html>: Defines directory-specific settings.
  • Options Indexes FollowSymLinks: Allows directory indexing and following symbolic links.
  • AllowOverride All: Allows the use of .htaccess files for overriding server settings.
  • Require all granted: Grants access to all clients.

Repeat the process for test.com by creating the test.com.conf file with the following content:

<VirtualHost *:80>
  ServerName test.com
  ServerAlias www.test.com
  DocumentRoot /var/www/test.com/html
  ErrorLog /var/www/test.com/error.log
  CustomLog /var/www/test.com/access.log combined

  <Directory /var/www/test.com/html>
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
  </Directory>
</VirtualHost>

Multiple Domain Setup

With the above configurations, you can host multiple domains on your CentOS Stream 10 server. Each domain will have its own document root and log files, making it easier to manage them separately.

After creating the virtual host configuration files, restart the Apache service to apply the changes:

sudo systemctl restart httpd

Now, create simple HTML files in the document root directories to test the configuration. For example, create an index.html file in /var/www/example.com/html with the following content:

<!DOCTYPE html>
 <html>
 <head>
  <title>Welcome to example.com</title>
 </head>
 <body>
  <h1>Success! example.com is working!</h1>
 </body>
 </html>

Repeat this process for test.com by creating an index.html file in /var/www/test.com/html with similar content. Update your DNS records to point your domains to your server’s IP address. This step is crucial for your domains to resolve to your server. Open your web browser and navigate to example.com and test.com. You should see the respective HTML content you created.

Security Configuration

Securing your virtual hosts is crucial to protect your websites from potential threats. Configuring firewall settings and implementing SSL/TLS are essential steps.

Firewall Settings

Configure the firewall to allow HTTP (port 80) and HTTPS (port 443) traffic. This ensures that users can access your websites. Use the following commands to open the necessary ports:

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

These commands add the HTTP and HTTPS services to the firewall, allowing incoming traffic on ports 80 and 443, respectively. The --reload command applies the changes without requiring a reboot.

SELinux Considerations

SELinux (Security-Enhanced Linux) provides an additional layer of security. However, it can sometimes interfere with Apache. Ensure that SELinux is configured to allow Apache to serve content from the custom document root directories. You can use the semanage command to manage SELinux policies. First, install the policycoreutils-python-utils package:

sudo dnf install policycoreutils-python-utils -y

Then, add the necessary SELinux policy:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com/html(/.*)?"
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/test.com/html(/.*)?"
sudo restorecon -Rv /var/www/example.com/html
sudo restorecon -Rv /var/www/test.com/html

These commands add SELinux policies that allow Apache to access the content in the specified directories. The restorecon command applies these policies.

SSL/TLS Setup

Implementing SSL/TLS is essential for securing your websites. It encrypts the data transmitted between the server and the client, protecting sensitive information. You can obtain SSL/TLS certificates from a Certificate Authority (CA) like Let’s Encrypt. Install the certbot client:

sudo dnf install certbot python3-certbot-apache -y

Then, obtain and install the SSL/TLS certificates using Certbot:

sudo certbot --apache -d example.com -d www.example.com
sudo certbot --apache -d test.com -d www.test.com

Certbot will automatically configure Apache to use the SSL/TLS certificates. It will also set up automatic renewal of the certificates. After running Certbot, your virtual host configuration files will be updated to include the SSL/TLS settings. Ensure that your firewall allows HTTPS traffic (port 443). Restart the Apache service to apply the changes:

sudo systemctl restart httpd

Testing and Troubleshooting

After setting up your virtual hosts, it’s important to test the configuration and troubleshoot any issues that may arise. This ensures that your websites are accessible and functioning correctly.

Configuration Testing

Verify the syntax of your Apache configuration files using the following command:

sudo apachectl configtest

This command checks for syntax errors in your configuration files. If there are any errors, it will display them, allowing you to correct them. Common errors include incorrect directives, missing semicolons, and syntax errors in the <Directory> sections.

Common Errors and Solutions

  • Website Not Accessible:
    • Ensure that your DNS records are correctly pointing to your server’s IP address.
    • Check your firewall settings to ensure that HTTP (port 80) and HTTPS (port 443) traffic are allowed.
    • Verify that the DocumentRoot directive in your virtual host configuration file is correct.
  • Permissions Issues:
    • Ensure that the Apache user (apache) has the necessary permissions to access the website files.
    • Use the chown and chmod commands to set the correct ownership and permissions.
  • SELinux Errors:
    • Check the SELinux logs for any denied access messages.
    • Use the semanage command to create the necessary SELinux policies.

Testing Virtual Host Accessibility

Open your web browser and navigate to your domain names (e.g., example.com and test.com). If everything is configured correctly, you should see the content you placed in the respective document root directories. Use the curl command to test the accessibility of your websites from the command line:

curl http://example.com
curl http://test.com

These commands will display the HTML content of the websites in the terminal. If you encounter any issues, check the Apache error logs for more information. The error logs are located in the paths specified by the ErrorLog directive in your virtual host configuration files.

Advanced Configuration

Once you have set up your virtual hosts, you can further optimize them for performance and security. This involves configuring cache settings, modules, and resource allocation.

Performance Optimization

  • Cache Settings:
    • Enable caching to reduce the load on your server and improve website loading times.
    • Use modules like mod_cache and mod_expires to configure caching.
  • Module Configuration:
    • Enable only the necessary Apache modules to reduce resource consumption.
    • Disable any modules that are not required for your websites.
  • Resource Allocation:
    • Configure the MaxRequestWorkers directive to limit the number of concurrent requests that Apache can handle.
    • Adjust the KeepAlive settings to optimize the use of persistent connections.

Maintenance and Management

Regular maintenance and management are essential for ensuring the long-term stability and security of your virtual hosts. This involves log rotation, backup procedures, and monitoring considerations.

Regular Tasks

  • Log Rotation:
    • Implement log rotation to prevent log files from growing too large.
    • Use the logrotate utility to automate log rotation.
  • Backup Procedures:
    • Regularly back up your website files and Apache configuration files.
    • Store the backups in a secure location.
  • Monitoring Considerations:
    • Monitor your server’s performance to identify any potential issues.
    • Use tools like top, htop, and netstat to monitor resource usage.

Congratulations! You have successfully installed Apache. Thanks for using this tutorial to setup virtual hosts Apache web server on CentOS Stream 10 system. For additional help or useful information, we recommend you check the official Apache website.

VPS Manage Service Offer
If you don’t have time to do all of this stuff, or if this is not your area of expertise, we offer a service to do “VPS Manage Service Offer”, starting from $10 (Paypal payment). Please contact us to get the best deal!

r00t

r00t is an experienced Linux enthusiast and technical writer with a passion for open-source software. With years of hands-on experience in various Linux distributions, r00t has developed a deep understanding of the Linux ecosystem and its powerful tools. He holds certifications in SCE and has contributed to several open-source projects. r00t is dedicated to sharing her knowledge and expertise through well-researched and informative articles, helping others navigate the world of Linux with confidence.
Back to top button