如何在Rocky Linux 9上安装Nginx

介绍

Nginx是世界上最受欢迎的Web服务器之一,负责托管一些互联网上最大和最高流量的站点。它是一个轻量级选择,可用作Web服务器或反向代理。

在本指南中,您将学习如何在Rocky Linux 9服务器上安装Nginx,调整防火墙,管理Nginx进程,并设置服务器块,以从单个服务器托管多个域名。

先决条件

在开始本指南之前,您应该在服务器上配置一个常规的非根用户,并具有sudo特权。您可以按照我们的Rocky Linux 9的初始服务器设置指南学习如何配置常规用户帐户。

此外,完成本教程的最后几个步骤之前,您可能还希望注册一个域名。有关使用DigitalOcean设置域名的更多信息,请参阅我们的DigitalOcean DNS简介

当您有可用帐户时,请以非根用户身份登录开始。

步骤 1 – 安装 Nginx

由于 Nginx 可在 Rocky 的默认软件仓库中找到,您可以使用 dnf 软件包管理器的单个命令来安装它。

使用 dnf install 安装 nginx 软件包:

  1. sudo dnf install nginx

在提示时,输入 y 以确认您要安装 nginx。之后,dnf 将在您的服务器上安装 Nginx 及其所有必需的依赖项。

安装完成后,运行以下命令启用并启动 Web 服务器:

  1. sudo systemctl enable nginx
  2. sudo systemctl start nginx

这将使 Nginx 在服务器重新启动时自动重启。您的新 Web 服务器现在应该已经运行起来了,但在测试之前,您可能需要更改防火墙配置。

步骤 2 – 调整防火墙

如果您在 Rocky Linux 9 的初始服务器设置指南中启用了 firewalld 防火墙,您需要调整防火墙设置,以允许默认情况下在端口 80 上运行的 Nginx Web 服务器接受外部连接。

运行以下命令来永久启用端口80上的HTTP连接:

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

要验证http防火墙服务是否已正确添加,您可以运行:

  1. sudo firewall-cmd --permanent --list-all

您将看到类似以下的输出:

Output
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

要应用更改,您需要重新加载防火墙服务:

  1. sudo firewall-cmd --reload

您的Web服务器现在应该对外部访客可访问:

第三步 – 检查您的Web服务器

此时,您的Web服务器应该已经启动。

您可以使用systemctl status命令确保服务正在运行:

  1. systemctl status nginx
Output
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-09-14 21:03:46 UTC; 7min ago Process: 18384 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Process: 18385 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 18386 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Main PID: 18387 (nginx) Tasks: 3 (limit: 10938) Memory: 2.8M CPU: 43ms CGroup: /system.slice/nginx.service ├─18387 "nginx: master process /usr/sbin/nginx" ├─18388 "nginx: worker process" └─18389 "nginx: worker process"

通过此输出确认,服务已成功启动。但是,测试的最佳方法是实际请求Nginx的页面。

您可以访问默认的Nginx登录页面来确认软件是否正常运行,方法是转到您服务器的IP地址。如果您不知道服务器的IP地址,您可以使用icanhazip.com工具找到它,该工具将给出您从互联网上另一个位置接收到的公共IP地址:

  1. curl -4 icanhazip.com

当您拥有服务器的IP地址时,将其输入到浏览器的地址栏中:

http://your_server_ip

您应该收到默认的Nginx登录页面:

如果您在此页面上,您的服务器正在正确运行并且已准备好进行管理。

步骤 4 – 管理 Nginx 进程

现在您的网络服务器已经运行起来了,让我们来看一些服务管理命令。

要停止您的网络服务器,请使用 systemctl stop

  1. sudo systemctl stop nginx

要在停止状态下启动网络服务器,请使用 systemctl start

  1. sudo systemctl start nginx

要停止然后重新启动服务,请使用 systemctl restart

  1. sudo systemctl restart nginx

如果您只是在进行配置更改,Nginx 通常可以在不中断连接的情况下重新加载。要做到这一点,请使用 systemctl reload

  1. sudo systemctl reload nginx

在本教程的前面,您已经配置了 Nginx 在服务器启动时自动启动。您可以使用 systemctl disable 来禁用此行为:

  1. sudo systemctl disable nginx

要重新启用服务以在启动时启动,您可以键入:

  1. sudo systemctl enable nginx

步骤 5 – 熟悉重要的 Nginx 文件和目录

现在您已经知道如何管理 Nginx 服务了,您应该花几分钟时间熟悉一下一些重要的目录和文件。

内容

  • /usr/share/nginx/html:实际的网页内容,默认情况下仅包含您之前看到的默认 Nginx 页面,存储在 /usr/share/nginx/html 目录中。这可以通过修改 Nginx 配置文件进行更改。

服务器配置

  • /etc/nginx:Nginx 配置目录。所有的 Nginx 配置文件都驻留在这里。
  • /etc/nginx/nginx.conf:主 Nginx 配置文件。可以修改此文件以更改 Nginx 全局配置。
  • /etc/nginx/conf.d/:该目录包含服务器块配置文件,您可以在其中定义托管在 Nginx 中的网站。一种典型的方法是将每个网站放在以网站域名命名的单独文件中,例如 your_domain.conf

服务器日志

  • /var/log/nginx/access.log:您的 Web 服务器的每个请求都记录在此日志文件中,除非 Nginx 配置为执行其他操作。
  • /var/log/nginx/error.log:任何 Nginx 错误都将记录在此日志中。

现在,您应该准备好配置站点以托管一个或多个域。

第 6 步 – 设置服务器块(可选)

在使用 Nginx web 服务器时,服务器块(类似于 Apache 中的虚拟主机)可用于组织配置细节并从单个服务器托管多个域。在 Rocky Linux 9 上,服务器块在位于 /etc/nginx/conf.d.conf 文件中定义。我们将设置一个名为 your_domain 的域,但您应该将其替换为您自己的域名。

默认情况下,Rocky Linux 9 上的 Nginx 配置为从 /usr/share/nginx/html 目录中提供文档。虽然这对于单个站点效果很好,但如果您托管多个站点,这可能变得难以管理。与其修改 /usr/share/nginx/html,您将在 /var/www 中为 your_domain 网站创建目录结构,将 /usr/share/nginx/html 保留为默认目录,以在客户端请求不匹配任何其他站点时提供服务。

按照以下方式为 your_domain 创建目录,使用 -p 标志创建任何必要的父目录:

  1. sudo mkdir -p /var/www/your_domain/html

接下来,使用$USER环境变量分配目录的所有权,该变量应该引用您当前的系统用户:

  1. sudo chown -R $USER:$USER /var/www/your_domain/html

现在,您将创建一个示例index.html页面来测试服务器块配置。Rocky Linux 9 默认的文本编辑器是vivi是一个非常强大的文本编辑器,但对于缺乏经验的用户来说可能有些晦涩。您可能希望安装一个更加用户友好的编辑器,比如nano,以便在您的Rocky Linux 9服务器上编辑配置文件:

  1. sudo dnf install nano

接下来,使用nano或您喜欢的编辑器创建一个示例index.html页面:

  1. nano /var/www/your_domain/html/index.html

在其中,添加以下示例HTML:

/var/www/your_domain/html/index.html
<html>
    <head>
        <title>Welcome to your_domain</title>
    </head>
    <body>
        <h1>Success! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
    </body>
</html>

完成后保存并关闭文件。如果您使用nano,您可以通过按CTRL + X保存并退出,然后在提示时按Y,然后按Enter。

为了使Nginx提供此内容,您需要创建一个带有指令的服务器块,该指令指向您的自定义网站根目录。在/etc/nginx/conf.d/your_domain.conf中创建一个新的服务器块:

  1. sudo nano /etc/nginx/conf.d/your_domain.conf

粘贴以下配置块:

/etc/nginx/conf.d/your_domain.conf
server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

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

请注意,我们已经将root配置更新为我们的新目录,并将server_name更新为我们的域名。保存并关闭文件。

现在已启用并配置了两个服务器块,以响应基于它们的listenserver_name指令的请求(您可以在这里详细了解Nginx如何处理这些指令):

  • your_domain:将响应对your_domainwww.your_domain的请求。
  • default:将响应在端口80上与其他两个块不匹配的任何请求。

接下来,测试以确保您的Nginx文件中没有语法错误,使用nginx -t

  1. sudo nginx -t

如果没有问题,请重新启动Nginx以启用更改:

  1. sudo systemctl restart nginx

在您可以从浏览器测试更改之前,您需要更新服务器的SELinux安全上下文,以允许Nginx从/var/www/your_domain目录提供内容。

chcon上下文更新将允许将您的自定义文档根目录作为HTTP内容提供:

  1. chcon -vR system_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/

现在,Nginx应该正在提供您的域名。您可以通过转到http://your_domain来测试,您应该看到类似于以下内容:

结论

现在您已经安装了您的网络服务器,您有许多选择可用于提供内容的类型以及您想要使用的技术,以创建更丰富的体验。

要为您的域名设置HTTPS,并使用免费的SSL证书使用Let’s Encrypt,您应该继续如何在Rocky Linux 9上使用Let’s Encrypt保护Nginx

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-rocky-linux-9