AlmaLinuxRHEL Based

How To Install Nginx on AlmaLinux 10

Install Nginx on AlmaLinux 10

Nginx stands as one of the most powerful and widely adopted web servers in the modern digital landscape. Its exceptional performance, scalability, and robust architecture make it the preferred choice for hosting websites, serving web applications, and managing reverse proxy configurations. When combined with AlmaLinux 10, an enterprise-grade Linux distribution known for its stability and security, Nginx creates a formidable foundation for web infrastructure.

This comprehensive guide will walk you through every aspect of installing Nginx on AlmaLinux 10, covering multiple installation methods, essential configurations, security considerations, and troubleshooting techniques. Whether you’re a system administrator managing production servers or a developer setting up a local environment, this tutorial provides the knowledge and tools needed to successfully deploy Nginx on your AlmaLinux 10 system.

Prerequisites and System Requirements

Before diving into the installation process, ensuring your system meets the necessary requirements is crucial for a smooth deployment. AlmaLinux 10 provides an excellent foundation for running Nginx, but proper preparation sets the stage for optimal performance and security.

Hardware Requirements

Your AlmaLinux 10 system should have adequate resources to handle both the operating system and Nginx workloads. A minimum of 1GB RAM is recommended for basic installations, though 2GB or more is preferable for production environments. CPU requirements are modest, with any modern processor capable of handling Nginx efficiently. Storage considerations depend on your intended use case, but allocating at least 10GB of free space ensures room for web content, logs, and system updates.

Software Prerequisites

A fresh AlmaLinux 10 installation provides the ideal starting point for Nginx deployment. Root access or a user account with sudo privileges is essential for installing packages and modifying system configurations. Basic familiarity with Linux command-line operations will help you navigate the installation process more effectively, though this guide provides detailed explanations for each step.

Network Considerations

Web server functionality requires specific network ports to be available and properly configured. Port 80 handles standard HTTP traffic, while port 443 manages HTTPS connections for SSL-encrypted communications. Planning your firewall configuration in advance prevents connectivity issues and ensures secure access to your web services.

System Preparation

Proper system preparation forms the foundation of a successful Nginx installation. Taking time to update packages, install necessary build tools, and configure user accounts prevents common issues and establishes security best practices from the beginning.

Updating the System

Begin by ensuring your AlmaLinux 10 system has the latest security patches and package updates. Open a terminal and execute the following command to refresh package repositories and install available updates:

sudo dnf update -y

This command updates all installed packages to their latest versions, addressing security vulnerabilities and compatibility issues that might affect Nginx installation or operation. The process may take several minutes depending on the number of available updates and your internet connection speed.

Installing Essential Build Tools

AlmaLinux 10 requires specific development tools and libraries to compile software from source code successfully. Install the Development Tools group package and essential libraries using these commands:

sudo dnf groupinstall "Development Tools" -y
sudo dnf install wget tar gcc make zlib zlib-devel openssl openssl-devel libpcre2 libpcre2-devel -y

These packages provide crucial functionality for Nginx compilation and operation. The gcc compiler handles source code compilation, while zlib enables gzip compression features. OpenSSL libraries support SSL/TLS encryption for secure HTTPS connections, and PCRE2 libraries enable regular expression processing for URL rewriting and request filtering.

Creating Dedicated Nginx User

Security best practices recommend running web services under dedicated system accounts with minimal privileges. Create a non-login system user specifically for Nginx processes:

sudo useradd --system --no-create-home --shell /sbin/nologin nginx

This command creates a system user named ‘nginx’ without a home directory or login shell, preventing unauthorized access while providing the necessary user context for Nginx worker processes.

Installation Method 1: Package Manager Installation

The package manager approach offers the simplest and most straightforward method for installing Nginx on AlmaLinux 10. This method handles dependency resolution automatically and integrates seamlessly with system package management tools.

Installing via DNF Package Manager

AlmaLinux 10 uses the DNF package manager, which provides access to Nginx through the default repositories. Install Nginx using this simple command:

sudo dnf install nginx -y

This command downloads and installs the latest Nginx version available in the AlmaLinux repositories, along with all required dependencies. The installation process typically completes within a few minutes, depending on your internet connection speed and server performance.

Package manager installations offer several advantages including automatic dependency management, easy updates through standard system maintenance procedures, and integration with system service management tools. However, repository versions may not always include the absolute latest Nginx features or security updates.

Using EPEL Repository for Latest Version

The Extra Packages for Enterprise Linux (EPEL) repository often provides more recent Nginx versions than default AlmaLinux repositories. Install the EPEL repository and then install Nginx:

sudo dnf install epel-release -y
sudo dnf install nginx -y

EPEL repositories maintain packages that complement the base AlmaLinux distribution without conflicting with core system components. This approach provides access to newer Nginx versions while maintaining system stability and compatibility.

Starting and Enabling Nginx Service

After successful installation, configure Nginx to start automatically at system boot and begin running immediately:

sudo systemctl start nginx
sudo systemctl enable nginx

The first command starts the Nginx service immediately, while the second ensures Nginx launches automatically during system startup. Verify the service status using:

sudo systemctl status nginx

A properly configured Nginx service displays an “active (running)” status with process information and recent log entries.

Installation Method 2: Source Code Installation

Installing Nginx from source code provides maximum control over features, modules, and system integration. This method enables custom configurations and optimization for specific use cases, though it requires more technical knowledge and manual maintenance.

Downloading Nginx Source Code

Navigate to a suitable working directory and download the latest Nginx source code from the official repository:

cd /usr/local/src
sudo wget https://nginx.org/download/nginx-1.28.0.tar.gz
sudo tar -zxvf nginx-1.28.0.tar.gz
cd nginx-1.28.0

Always verify the latest version number on the official Nginx website before downloading. The /usr/local/src directory provides a standard location for source code compilation, keeping downloaded files organized and easily accessible.

Compilation Configuration

Configure the compilation process with specific options tailored to your requirements:

sudo ./configure \
    --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --modules-path=/usr/lib64/nginx/modules \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_gzip_static_module \
    --with-http_stub_status_module \
    --with-http_sub_module \
    --with-http_addition_module \
    --with-http_secure_link_module \
    --with-threads \
    --with-file-aio

This configuration enables essential modules including SSL support, HTTP/2 protocol, gzip compression, and various performance enhancements. Custom paths ensure proper integration with AlmaLinux system conventions and facilitate maintenance procedures.

Compilation and Installation Process

Execute the compilation and installation commands:

sudo make
sudo make install

The compilation process may take several minutes depending on your system’s processing power. Monitor the output for any error messages that might indicate missing dependencies or configuration issues. Upon successful completion, Nginx binaries and configuration files are installed in their designated locations.

Create a systemd service file for proper system integration:

sudo tee /etc/systemd/system/nginx.service > /dev/null <

Reload systemd configuration and enable the service:

sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx

Firewall Configuration and Security

Proper firewall configuration ensures your Nginx installation remains secure while providing necessary access for web traffic. AlmaLinux 10 uses FirewallD as the default firewall management tool, requiring specific configuration to allow HTTP and HTTPS traffic.

FirewallD Configuration

Configure firewall rules to permit web traffic through the necessary ports:

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

These commands permanently add HTTP and HTTPS services to the firewall’s allowed traffic list, ensuring rules persist after system reboots. The reload command applies changes immediately without requiring a firewall restart.

Verify the firewall configuration by listing active rules:

sudo firewall-cmd --list-all

Security Best Practices

Implement additional security measures to protect your Nginx installation. Ensure proper file ownership and permissions on Nginx directories:

sudo chown -R nginx:nginx /var/log/nginx
sudo chmod 755 /etc/nginx
sudo chmod 644 /etc/nginx/nginx.conf

These permissions prevent unauthorized access to configuration files and log directories while maintaining proper functionality for Nginx processes. Regular security audits and updates help maintain system integrity over time.

Basic Nginx Configuration

Understanding Nginx configuration structure enables effective customization and optimization for your specific requirements. The main configuration file controls global settings, while server blocks define individual virtual host configurations.

Understanding Configuration Structure

Nginx configuration follows a hierarchical structure with nested context blocks. The main configuration file located at /etc/nginx/nginx.conf contains global settings affecting the entire server:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
}

This configuration establishes fundamental server behavior including worker process management, logging settings, and performance optimizations.

Creating Server Blocks

Server blocks define virtual hosts for serving different websites or applications. Create a basic server block configuration:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

This configuration defines a basic virtual host listening on port 80 for the specified domain names. The document root directory contains website files, while location blocks control request handling and error page responses.

Testing Configuration Syntax

Always validate configuration changes before applying them to prevent service disruptions:

sudo nginx -t

This command performs syntax checking on all configuration files, reporting any errors or warnings. Only reload Nginx configuration after confirming syntax validity:

sudo systemctl reload nginx

Testing and Verification

Thorough testing ensures your Nginx installation functions correctly and provides the expected service quality. Multiple verification methods help identify potential issues and confirm proper configuration.

Initial Functionality Test

Access your Nginx server through a web browser using your server’s IP address or domain name. A successful installation displays the default Nginx welcome page containing server information and basic usage instructions. Alternatively, use command-line tools for testing:

curl -I http://localhost

This command retrieves HTTP headers from the local server, confirming Nginx responds to requests correctly. Expected output includes status code 200 and server identification headers indicating successful operation.

Service Status Verification

Monitor Nginx service status and performance using systemctl commands:

sudo systemctl status nginx

Active services display detailed status information including process IDs, memory usage, and recent log entries. Pay attention to any error messages or warnings that might indicate configuration issues or resource constraints.

Examine log files for additional diagnostic information:

sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

Access logs record all incoming requests, while error logs capture system messages and configuration problems. Regular log monitoring helps identify performance bottlenecks and security concerns.

Advanced Configuration Options

Advanced Nginx configurations enable enhanced security, improved performance, and extended functionality for production environments. These optimizations address specific requirements and operational challenges.

SSL/TLS Certificate Setup

Secure HTTP connections require SSL/TLS certificates for encryption and authentication. Configure HTTPS support using Let’s Encrypt certificates or commercial SSL providers:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;

    location / {
        root /var/www/html;
        index index.html;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

This configuration enables secure HTTPS connections while redirecting HTTP traffic to encrypted channels.

Performance Optimization

Implement performance enhancements to improve response times and resource utilization:

worker_processes auto;
worker_connections 1024;

http {
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    keepalive_timeout 65;
    client_max_body_size 64M;
}

These optimizations enable compression, file caching, and connection management improvements that reduce bandwidth usage and server load.

Troubleshooting Common Issues

Effective troubleshooting requires systematic problem identification and resolution strategies. Understanding common installation and configuration issues helps maintain reliable Nginx operations.

Installation Problems

Package dependency conflicts may prevent successful Nginx installation. Resolve dependency issues by updating system packages and clearing package manager caches:

sudo dnf clean all
sudo dnf update
sudo dnf install nginx

Permission errors during installation typically indicate insufficient user privileges. Ensure you have sudo access or root privileges before attempting package installation.

Repository access problems may result from network connectivity issues or repository configuration errors. Verify internet connectivity and check repository configuration files for accuracy.

Service Startup Issues

Port conflicts prevent Nginx from binding to required network addresses. Identify processes using ports 80 and 443:

sudo ss -tlnp | grep :80
sudo ss -tlnp | grep :443

Stop conflicting services or reconfigure Nginx to use alternative ports if necessary.

Configuration syntax errors prevent successful service startup. Use the nginx -t command to identify and correct syntax problems before attempting to start the service.

SELinux policies may block Nginx operations on systems with enhanced security configurations. Check SELinux status and configure appropriate policies:

sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_setrlimit 1

Connection Problems

Network connectivity issues may prevent external access to your Nginx server. Verify firewall rules allow HTTP and HTTPS traffic, and ensure router configurations permit incoming connections to your server.

DNS resolution problems can prevent domain-based access to your web server. Verify DNS records point to the correct IP address and check domain registration status.

Maintenance and Updates

Regular maintenance ensures optimal Nginx performance and security. Established procedures for updates, monitoring, and log management prevent service degradations and security vulnerabilities.

Keeping Nginx Updated

Package manager installations simplify update procedures through standard system maintenance commands:

sudo dnf update nginx

Source code installations require manual update procedures including downloading new versions, recompiling, and carefully replacing existing binaries. Always backup configuration files before performing major updates.

Monitor security advisories and release notes for critical updates that address vulnerabilities or performance issues. Test updates in development environments before applying them to production systems.

Log Management

Configure log rotation to prevent log files from consuming excessive disk space:

sudo tee /etc/logrotate.d/nginx > /dev/null <<EOF /var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 644 nginx nginx postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript } EOF

This configuration rotates logs daily, maintains 52 weeks of history, and compresses old log files to conserve storage space.

Implement monitoring solutions to track server performance, error rates, and resource utilization. Tools like Prometheus, Grafana, or commercial monitoring services provide insights into server health and performance trends.

Congratulations! You have successfully installed Nginx. Thanks for using this tutorial for installing the Nginx web server on your AlmaLinux OS 10 system. For additional help or useful information, we recommend you check the official Nginx 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