How to Install Nginx Web Server on AlmaLinux 9
-
by cobra_admin
- 148
Prerequisites
Before you begin, you need to:
- Have access to an AlmaLinux 9 instance as a non-root user with sudo privileges.
Install Nginx
You can install Nginx on AlmaLinux from the default DNF package sources. It’s available using the nginx
package name. Use the following steps to update the DNF package manager and install Nginx.
- Update system packages.
CONSOLE
$ sudo dnf update
- Install the Nginx web server.
CONSOLE
$ sudo dnf install nginx -y
- Check that Nginx is installed correctly.
CONSOLE
$ sudo nginx -v
Output:
nginx version: nginx/1.20.1
- Start the Nginx service.
CONSOLE
$ sudo systemctl start nginx
- Enable HTTP traffic in the firewall.
CONSOLE
$ sudo firewall-cmd --permanent --add-service=http
- Run the following command to install Firewalld if it’s not installed and allow SSH connections.
CONSOLE
$ sudo dnf install firewalld -y && sudo firewall-cmd --permanent --add-service=ssh
- Start Firewalld if it’s not running.
CONSOLE
$ sudo systemctl start firewalld
- Run the following command to install Firewalld if it’s not installed and allow SSH connections.
- Apply firewall changes.
CONSOLE
$ sudo firewall-cmd --reload
- Verify that Nginx is working in a browser.
http://server-ip-address
Manage the Nginx System Service
Nginx installs a systemd service by default. Use the following steps to manage the service and ensure it runs consistently on your server.
- Enable Nginx to start on boot.
CONSOLE
$ sudo systemctl enable nginx
- Start Nginx if it isn’t already running.
CONSOLE
$ sudo systemctl start nginx
- Verify the Nginx system service and confirm that it’s running.
CONSOLE
$ sudo systemctl status nginx
Output:
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled) Active: active (running) since Sun 2025-03-30 23:12:44 UTC; 1min 33s ago Main PID: 52297 (nginx) Tasks: 2 (limit: 5716) Memory: 2.0M CPU: 36ms CGroup: /system.slice/nginx.service ├─52297 "nginx: master process /usr/sbin/nginx" └─52298 "nginx: worker process"
- Reload Nginx to apply new configuration changes.
CONSOLE
$ sudo systemctl reload nginx
- Restart the Nginx service.
CONSOLE
$ sudo systemctl restart nginx
Create Nginx Virtual Host Configurations (Server Blocks)
Nginx virtual host configurations include the server name, administrator, and the backend web application information. The default.d
and conf.d
directories contain virtual host configurations for Nginx on AlmaLinux by default unless changed. Follow these steps to create a custom server block with your own HTML content.
- Verify the Nginx system service and confirm that it’s running.
CONSOLE
$ sudo systemctl status nginx
- Set up the document root and create sample content.
CONSOLE
$ sudo mkdir /usr/share/nginx/example && sudo nano /usr/share/nginx/example/index.html
- Enter the following HTML application code in the
index.html
file.HTML<html> <body> <h1>Sample HTML Application</h1> <p>Powered by the Nginx Web Server </p> </body> </html>
Save the file and exit the text editor.
The HTML application displays when the Nginx web server loads all supported files for display in a web browser.
- Create a new server block file.
CONSOLE
$ cd /etc/nginx/conf.d/ && sudo nano example-host.conf
- Enter the following Nginx configurations into the
example-host.conf
file. Replaceexample.com
with your domain.INIserver { listen 80; listen [::]:80; server_name example.com; root /usr/share/nginx/example; index index.html index.htm; access_log /var/log/nginx/example.com_access.log; error_log /var/log/nginx/example.com_error.log; location / { try_files $uri $uri/ =404; } }
Save the file and exit the text editor.
The Nginx virtual host configuration serves web application files from the
/usr/share/nginx/example
directory using theexample.com
domain. - Test the Nginx configuration syntax for errors.
CONSOLE
$ sudo nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- Reload Nginx to apply the configuration changes.
CONSOLE
$ sudo systemctl reload nginx
- Test access to your domain and confirm that the web application loads.
http://your-domain.com/
The default server block is stored in the /etc/nginx.conf
file. Remove the server block to disable it.
Secure the Nginx Web Server
Nginx delivers web applications using HTTP by default unless specified in your virtual host configurations. HTTPS provides encryption between the Nginx and a client’s web browser, ensuring secure connections to the web server. This section walks you through installing Certbot, configuring HTTPS, and adjusting SELinux and firewall settings.
- Install the EPEL repository, which includes the Certbot tool.
CONSOLE
$ sudo dnf install epel-release -y
- Update your system packages.
CONSOLE
$ sudo dnf update
- Install Certbot with Nginx plugin support.
CONSOLE
$ sudo dnf install python3-certbot-nginx -y
- Request an SSL certificate using Certbot. Replace
example.com
andadmin@example.com
with your actual domain and email address.CONSOLE$ do certbot --nginx --domain example.com --email admin@example.com --agree-tos
NoteReplace
example.com
with your real domain name. If you don’t have one, consider using a test domain or skip the SSL setup. - Reload Nginx to apply the HTTPS configuration.
CONSOLE
$ sudo systemctl reload nginx
- Test the Nginx configuration for syntax errors.
CONSOLE
$ sudo nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- Allow HTTPS traffic through the firewall.
CONSOLE
$ sudo firewall-cmd --permanent --add-service=https
- Optionally, remove HTTP access if you want to enforce HTTPS-only.
CONSOLE
$ sudo firewall-cmd --permanent --remove-service=http
- Reload Firewalld to apply the new rules.
CONSOLE
$ sudo firewall-cmd --reload
- Check the status of SELinux to ensure it’s enabled.
CONSOLE
$ sestatus
Output:
SELinux status: enabled SELinuxfs mount: /sys/fs/selinux
- Install the required SELinux management utilities for the
semanage
command:CONSOLE$ sudo dnf install policycoreutils-python-utils -y
This ensures the
semanage
tool is available to manage SELinux contexts. - Update SELinux file context rules, enabling Nginx to read files in your custom directory.
CONSOLE
$ sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/example(/.*)?"
The SELinux
httpd_sys_content_t
context allows Nginx to access files in multiple directories after installation. Allowing access to web application directories enables Nginx to read configurations and application files. - Apply the new SELinux context.
CONSOLE
$ sudo restorecon -Rv /usr/share/nginx/example/
Output:
Relabeled /usr/share/nginx/example from unconfined_u:object_r:usr_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /usr/share/nginx/example/index.html from unconfined_u:object_r:usr_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
- Access your domain in a web browser using HTTPS to verify that the certificate is working.
https://example.com
Conclusion
You’ve now set up Nginx on AlmaLinux 9, configured it to serve static web content, and secured it with HTTPS and SELinux rules. Nginx is a flexible and high-performance web server that can easily scale to support dynamic web apps, backend integrations like PHP or databases, and production-grade deployments. From here, you can extend your setup by adding reverse proxy rules, enabling load balancing, or integrating with application stacks like Laravel, Flask, or Node.js.
Prerequisites Before you begin, you need to: Have access to an AlmaLinux 9 instance as a non-root user with sudo privileges. Install Nginx You can install Nginx on AlmaLinux from the default DNF package sources. It’s available using the nginx package name. Use the following steps to update the DNF package manager and install Nginx.…
Prerequisites Before you begin, you need to: Have access to an AlmaLinux 9 instance as a non-root user with sudo privileges. Install Nginx You can install Nginx on AlmaLinux from the default DNF package sources. It’s available using the nginx package name. Use the following steps to update the DNF package manager and install Nginx.…