FedoraRHEL Based

How To Install Apache on Fedora 43

Install Apache on Fedora 43

Apache HTTP Server stands as the world’s most widely deployed web server software, powering millions of websites across the internet. Its reliability, flexibility, and extensive feature set make it the preferred choice for hosting everything from simple static websites to complex web applications. Fedora 43, with its cutting-edge package management system and robust security features, provides an excellent platform for running Apache in both development and production environments. This comprehensive guide walks you through the complete process of installing, configuring, and securing Apache on Fedora 43, covering essential topics including firewall configuration, virtual host setup, SSL/TLS implementation, and troubleshooting common issues.

Whether you’re a system administrator setting up a production server or a developer creating a local testing environment, this tutorial provides the step-by-step instructions you need. You’ll learn how to leverage Fedora’s DNF package manager for seamless installation, manage Apache services with systemd, configure firewalld for proper network access, and implement security best practices including SELinux configuration.

Prerequisites and System Requirements

Before beginning the Apache installation process, ensure your system meets the following requirements. You’ll need a Fedora 43 installation, either a fresh setup or an existing server environment. Root access or sudo privileges are mandatory for installing packages and modifying system configurations.

Your server should have at least 1GB of RAM for basic Apache operations, though 2GB or more is recommended for production environments handling significant traffic. A stable internet connection is necessary for downloading packages and dependencies from Fedora’s repositories. Basic familiarity with the Linux command line will help you navigate through the installation steps more efficiently.

If you plan to configure virtual hosts for hosting multiple websites, having a registered domain name or access to DNS configuration is beneficial, though not strictly required for local development. Be aware that SELinux comes enabled by default on Fedora systems, which provides enhanced security but requires proper context configuration for Apache to function correctly.

Step 1: Update Your Fedora 43 System

Keeping your system updated is crucial before installing new software packages. Updates often include security patches, bug fixes, and dependency updates that ensure smooth installation and operation of Apache. Fedora 43 uses DNF (Dandified YUM) as its package manager, offering improved performance and dependency resolution compared to older package management tools.

Open your terminal and execute the following command to update all installed packages to their latest versions:

sudo dnf update -y

The -y flag automatically confirms the update process, preventing interactive prompts. Alternatively, you can use the upgrade command, which removes obsolete packages:

sudo dnf upgrade

Wait for the update process to complete. This may take several minutes depending on your internet speed and the number of packages requiring updates. If kernel updates were installed during this process, it’s advisable to reboot your system to ensure the new kernel loads properly. You can reboot with:

sudo reboot

Step 2: Install Apache HTTP Server (HTTPD)

Fedora packages Apache under the name “httpd,” following Red Hat Enterprise Linux conventions. This naming reflects Apache’s core executable and is consistent across RHEL-based distributions. You have two primary methods for installing Apache on Fedora 43.

Method 1: Install Apache as Individual Package

For most users seeking a minimal, streamlined installation, installing httpd as an individual package is the recommended approach. Execute this command:

sudo dnf install httpd -y

DNF automatically resolves and installs all required dependencies, including Apache modules and supporting libraries. This method gives you precise control over which additional components to install later. The installation typically completes within a few minutes, after which Apache is ready for configuration.

Method 2: Install Web Server Group Package

Fedora offers package groups that bundle related software together. The “Web Server” group includes Apache along with additional utilities and modules that might be useful for web hosting. Install this group with:

sudo dnf group install "Web Server"

This method installs supplementary tools beyond the core Apache server, which can be beneficial if you’re setting up a comprehensive web hosting environment. However, for minimal installations or when you want to add modules selectively, the individual package method is more appropriate.

Step 3: Start and Enable Apache Service

Fedora 43 uses systemd as its init system and service manager, providing powerful tools for controlling system services. The systemctl command serves as your primary interface for managing Apache. Understanding the difference between starting and enabling services is crucial: starting activates the service immediately, while enabling configures it to launch automatically at system boot.

Start the Apache service with this command:

sudo systemctl start httpd

To ensure Apache starts automatically whenever your system boots, enable the service:

sudo systemctl enable httpd

You can combine both actions into a single command using the --now flag, which simultaneously enables and starts the service:

sudo systemctl enable httpd --now

Verify that Apache is running correctly by checking its status:

sudo systemctl status httpd

The output displays detailed information about the Apache service, including whether it’s active (running), enabled for automatic startup, its main process ID (PID), memory usage, and recent log entries. Look for “active (running)” in green text, which confirms Apache is operating properly. The status output also shows the service’s uptime, CPU usage, and any recent error messages that might require attention.

Step 4: Configure Firewall Rules for Apache

Fedora’s default firewall, firewalld, blocks incoming connections on most ports by default, protecting your system from unauthorized access. To make your Apache web server accessible to external users, you must explicitly open the HTTP and HTTPS ports in the firewall configuration.

Understanding Firewalld on Fedora

Firewalld provides dynamic firewall management with support for network zones, making it more flexible than traditional iptables configurations. The permanent flag ensures that firewall rules persist across system reboots, while the reload command activates new rules without disrupting existing connections.

Method 1: Using Service Names (Recommended)

The cleanest approach uses predefined service names that firewalld recognizes. Open HTTP traffic (port 80) with this command:

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

For encrypted HTTPS traffic (port 443), execute:

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

After adding these rules, reload the firewall configuration to activate them:

sudo firewall-cmd --reload

Method 2: Using Port Numbers

Alternatively, you can specify ports directly, which offers more granular control. Open port 80 for HTTP:

sudo firewall-cmd --permanent --add-port=80/tcp

Open port 443 for HTTPS:

sudo firewall-cmd --permanent --add-port=443/tcp

Reload the firewall to apply changes:

sudo firewall-cmd --reload

Verify your firewall rules were applied correctly by listing all active rules:

sudo firewall-cmd --list-all

This command displays your firewall’s active zone configuration, showing all permitted services and ports. The service name method is generally preferred because it’s more semantic and easier to understand when reviewing configurations later.

Step 5: Test Apache Installation

With Apache running and firewall rules configured, it’s time to verify the installation works correctly. Open a web browser and navigate to your server’s address. If you’re testing locally, use:

http://localhost

For remote access or testing from another machine, use your server’s IP address:

http://your_server_ip

You should see the Fedora Apache test page, which displays information about Apache configuration and confirms successful installation. This default page indicates Apache is serving content properly. If the page doesn’t load, check your firewall rules and verify Apache is running with systemctl status httpd.

For command-line testing without a browser, use curl:

curl http://localhost

This command retrieves the HTML content of the default Apache page, useful for automated testing or troubleshooting on headless servers. A successful response confirms Apache is listening on the correct port and serving content.

Step 6: Understanding Apache Directory Structure on Fedora

Apache on Fedora follows a specific directory structure that organizes configuration files, web content, logs, and modules. Understanding this layout is essential for effective server management.

The main configuration file resides at /etc/httpd/conf/httpd.conf, containing global server settings. Additional configuration files live in /etc/httpd/conf.d/, which Apache reads automatically. This modular approach allows you to organize configurations by purpose without editing the main file.

Your web content belongs in /var/www/html/, the default document root where Apache looks for files to serve. Apache writes log files to /var/log/httpd/, including access_log for visitor information and error_log for troubleshooting issues.

Module configurations are stored in /etc/httpd/conf.modules.d/, enabling or disabling Apache modules as needed. SSL/TLS certificates belong in /etc/pki/tls/certs/ for public certificates and /etc/pki/tls/private/ for private keys.

Best practice dictates creating custom configuration files in /etc/httpd/conf.d/ rather than modifying default configurations. Apache loads files from this directory alphabetically, so naming them with prefixes like 01-, 02-, etc., controls load order.

Step 7: Configure Apache Virtual Hosts

Virtual hosts allow a single Apache instance to serve multiple websites with different domain names, making efficient use of server resources. This powerful feature is essential for hosting multiple sites or creating isolated development environments.

Creating Virtual Host Directory Structure

Organize your virtual host configurations by creating dedicated directories. Though Fedora doesn’t include these by default, they follow common Apache conventions:

sudo mkdir -p /etc/httpd/sites-available /etc/httpd/sites-enabled

The sites-available directory stores all virtual host configuration files, while sites-enabled contains symbolic links to active configurations. This separation allows you to maintain multiple configurations and enable them selectively.

Create a document root for your website, replacing example.com with your actual domain:

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

Set proper ownership so Apache can read the files. Apache runs as the apache user on Fedora:

sudo chown -R apache:apache /var/www/example.com

Configure appropriate permissions, allowing the owner full access while restricting others:

sudo chmod -R 755 /var/www/example.com

These permissions let Apache read and execute files while preventing unauthorized modifications.

Creating Virtual Host Configuration File

Create a configuration file for your virtual host:

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

Add the following configuration, customizing the domain name and paths:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
    DirectoryIndex index.html index.php
    
    <Directory /var/www/example.com>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>

This configuration tells Apache to respond to requests for example.com and www.example.com, serving files from /var/www/example.com. The Directory block sets permissions and options for the document root. The -Indexes option prevents directory listing, enhancing security, while +FollowSymLinks allows Apache to follow symbolic links.

Enabling Virtual Host and Testing

Create a symbolic link to enable the virtual host:

sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/

Before restarting Apache, always test your configuration syntax to catch errors:

sudo apachectl configtest

A “Syntax OK” message confirms your configuration is valid. If errors appear, review your configuration file for typos or missing directives. Apply the new configuration by restarting Apache:

sudo systemctl restart httpd

Test your virtual host by accessing your domain in a browser. For local testing without DNS, add an entry to /etc/hosts mapping your domain to localhost.

Step 8: Secure Apache with SSL/TLS (HTTPS)

Implementing SSL/TLS encryption is no longer optional for modern web servers. HTTPS protects data transmitted between clients and your server, prevents tampering, and improves search engine rankings.

Installing mod_ssl

Fedora provides Apache’s SSL module as a separate package. Install it with:

sudo dnf install mod_ssl -y

The mod_ssl package automatically configures itself, creating /etc/httpd/conf.d/ssl.conf with default SSL settings. After installation, Apache can handle HTTPS connections on port 443.

Obtaining SSL Certificates

You have several options for SSL certificates. For testing and development, self-signed certificates work adequately but will trigger browser warnings. For production environments, Let’s Encrypt provides free, automatically-renewing certificates that browsers trust.

For Let’s Encrypt certificates, install certbot:

sudo dnf install certbot python3-certbot-apache -y

Obtain and install certificates with:

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

Certbot automatically configures Apache for HTTPS and sets up automatic certificate renewal.

Configuring SSL in Virtual Host

For manual SSL configuration or custom certificates, create an SSL virtual host configuration:

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/example.com
    
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/example.com.crt
    SSLCertificateKeyFile /etc/pki/tls/private/example.com.key
    SSLCertificateChainFile /etc/pki/tls/certs/chain.crt
    
    <Directory /var/www/example.com>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Place your certificate files in the specified locations with appropriate permissions. Private keys should have restrictive permissions:

sudo chmod 600 /etc/pki/tls/private/example.com.key

If SELinux is enabled, restore proper security contexts:

sudo restorecon -RvF /etc/pki/tls/

This command ensures SELinux allows Apache to read your certificates.

Step 9: Essential Apache Management Commands

Mastering Apache management commands enables efficient server administration. Systemctl provides comprehensive control over the Apache service.

Start Apache when it’s stopped:

sudo systemctl start httpd

Stop Apache completely, terminating all connections:

sudo systemctl stop httpd

Restart Apache, which completely stops and starts the service. Use this after installing modules or making significant configuration changes:

sudo systemctl restart httpd

Reload Apache configuration without dropping active connections, ideal for minor configuration updates:

sudo systemctl reload httpd

This graceful reload keeps existing connections alive while applying new configurations to subsequent requests. Check Apache’s current status:

sudo systemctl status httpd

Enable Apache to start automatically at boot:

sudo systemctl enable httpd

Disable automatic startup:

sudo systemctl disable httpd

Test configuration syntax before applying changes:

sudo apachectl configtest

View Apache version and compiled-in modules:

httpd -v

These commands form the foundation of Apache administration, allowing you to manage the service effectively.

Step 10: Disable Apache Test Page (Optional)

The default Apache test page serves as installation confirmation but should be disabled on production servers. This page appears when Apache has no other content to serve, potentially revealing information about your server setup.

Fedora’s test page configuration lives in /etc/httpd/conf.d/welcome.conf. You can disable it by renaming the file:

sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.disabled

Alternatively, open the file and comment out its contents:

sudo nano /etc/httpd/conf.d/welcome.conf

Add a # symbol at the beginning of each line to disable the configuration. Restart Apache to apply changes:

sudo systemctl restart httpd

After disabling the test page, accessing your server without a configured virtual host will display a 403 Forbidden error instead, which is appropriate behavior.

Troubleshooting Common Apache Issues

Even with careful configuration, issues occasionally arise. Understanding common problems and their solutions streamlines troubleshooting.

If Apache fails to start, first check for configuration syntax errors:

sudo apachectl configtest

Syntax errors prevent Apache from starting. The output identifies the problematic file and line number. Review Apache’s error log for detailed information:

sudo tail -f /var/log/httpd/error_log

The -f flag follows the log in real-time, showing new entries as they occur.

Port conflicts occur when another service occupies port 80 or 443. Check which process is using a port:

sudo ss -tlnp | grep :80

Permission denied errors often stem from incorrect file ownership or SELinux contexts. Verify file permissions:

ls -lZ /var/www/example.com

The -Z flag displays SELinux contexts. If contexts are incorrect, restore them:

sudo restorecon -Rv /var/www/example.com

For SELinux-related issues, check recent denials:

sudo ausearch -m avc -ts recent

This command reveals SELinux blocking Apache operations. If you’re serving files from non-standard locations, adjust SELinux contexts accordingly or place your content in /var/www/.

Firewall blocks are another common issue. Verify firewall rules allow HTTP and HTTPS:

sudo firewall-cmd --list-all

403 Forbidden errors typically indicate permission problems. Ensure Apache can read your files and directories. All parent directories leading to your document root need execute permissions.

Security Best Practices for Apache on Fedora

Securing your Apache installation protects your server and its users from threats. Implementing these practices significantly reduces vulnerability to attacks.

Keep Apache and Fedora updated regularly. Security patches address newly discovered vulnerabilities:

sudo dnf update -y

Use HTTPS exclusively for production websites. Search engines favor HTTPS sites, and users trust encrypted connections. Disable directory listing to prevent exposing your site structure:

Options -Indexes

Hide Apache version information to make targeted attacks more difficult. Add to your configuration:

ServerTokens Prod
ServerSignature Off

Maintain proper file permissions. Directories should be 755, files 644:

find /var/www/example.com -type d -exec chmod 755 {} \;
find /var/www/example.com -type f -exec chmod 644 {} \;

Never disable SELinux. This mandatory access control system provides crucial protection. If SELinux blocks legitimate operations, adjust policies rather than disabling the system.

Implement rate limiting to mitigate DDoS attacks. The mod_evasive module helps protect against abuse. Monitor logs regularly for suspicious activity:

sudo tail -100 /var/log/httpd/access_log

Configure strong SSL/TLS protocols and ciphers. Disable outdated protocols like SSLv3 and TLS 1.0. Disable unnecessary Apache modules to reduce attack surface. Review loaded modules:

httpd -M

Disable unused modules by commenting out their LoadModule directives in /etc/httpd/conf.modules.d/.

Congratulations! You have successfully installed Apache. Thanks for using this tutorial for installing the Apache web server on your Fedora 43 Linux system. For additional 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