跳到内容

如何在 Rocky Linux 上安装最新版 Nginx

简介

Nginx 是一款旨在快速、高效且与几乎所有东西都兼容的 Web 服务器。我经常使用它,一旦你掌握了它——设置和配置起来非常容易。为此,我编写了本入门指南。

以下是 Nginx 突出的方式/它具有的功能的简要概述

  • 一个基本的 Web 服务器
  • 用于将流量定向到多个站点的反向代理
  • 用于管理对多个网站的流量的内置负载均衡器
  • 内置文件缓存以提高速度
  • WebSockets
  • 支持 FastCGI
  • 当然,还有 IPv6

很棒!所以只需 sudo dnf install nginx,对吧?是的,几乎就是这样,但我们添加了一些有用的技巧来帮助你入门。

先决条件和假设

你需要

  • 一台连接互联网的 Rocky Linux 机器或服务器。
  • 对命令行的基本了解。
  • 能够以 root 用户身份运行命令,无论是作为 root 用户还是使用 sudo
  • 你选择的文本编辑器,无论是图形界面还是命令行界面。在本教程中,我使用的是 nano

安装和运行 Nginx

首先,确保你的机器已更新

sudo dnf update

然后,安装 nginx

sudo dnf install nginx

安装完成后,启动 nginx 服务并使其在重启时自动启动

sudo systemctl enable --now nginx

要验证是否已安装最新版本的 Nginx(来自 Rocky 仓库的最新版本),请运行

nginx -v

从那里开始,你只需将 HTML 文件放到 /usr/share/nginx/html/ 目录中即可构建一个简单的静态网站。默认网站/虚拟主机的配置文件名为“nginx.conf”,它位于 /etc/nginx/ 中。它还包含许多其他基本的 Nginx 服务器配置,因此即使你选择将实际网站配置移动到另一个文件,你也应该保留“nginx.conf”的其余部分。

注意

本指南的早期版本描述了 nginx-mainline 的安装。这不再是一个选项。在大多数情况下,Rocky 仓库中的 Nginx 版本已经足够了,它提供了一个稳定基础,并带有回溯的安全补丁。仍然想使用 nginx-mainline 的用户可以通过网络搜索找到执行此操作的方法。但是,所有找到的操作指南都是针对 Rocky Linux 8 的。请注意,使用 nginx-mainline 通常是完全可行的,但不受支持。

配置防火墙

注意

如果你在 LXD/LXC 或 Docker 等容器上安装 Nginx,你现在可以跳过此部分。防火墙应由主机操作系统处理。

如果你尝试从另一台计算机查看机器的 IP 地址或域名上的网页,你可能什么也看不到。好吧,如果你有一个防火墙在运行,情况就会如此。

要打开必要的端口以便你实际上可以“看到”你的网页,我们将使用 Rocky Linux 的内置防火墙 firewalld。执行此操作的 firewalld 命令是 firewall-cmd。有两种方法可以做到:官方方法和手动方法。在这种情况下,官方方法是最好的,但你应该了解这两种方法以便将来参考。

官方方法将防火墙打开到 http 服务,当然,这是处理网页的服务。只需运行以下命令

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

让我们分解一下

  • -–permanent 标志告诉防火墙确保每次防火墙重启和服务器重启时都使用此配置。
  • –-zone=public 告诉防火墙从所有人接受对该端口的传入连接。
  • 最后,--add-service=http 告诉 firewalld 允许所有 HTTP 流量通过到服务器。

现在是手动执行此操作的方法。它几乎相同,只是你专门打开了 HTTP 使用的 80 端口。

sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
  • –-add-port=80/tcp 告诉防火墙接受对 80 端口的传入连接,只要它们使用传输控制协议,这就是你在此处需要的协议。

对于 SSL/HTTPS 流量,只需再次运行该命令并更改服务或端口号。

sudo firewall-cmd --permanent --zone=public --add-service=https
# Or, in some other cases:
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp

这些配置只有在你强制执行时才会生效。为此,告诉 firewalld 重新加载其配置,如下所示

sudo firewall-cmd --reload

注意

现在,这可能很少不起作用。在这些罕见的情况下,让 firewalld 按照你的意愿行事,使用老式的关闭并重新打开的方法。

systemctl restart firewalld

为了确保端口已正确添加,请运行firewall-cmd --list-all。 正确配置的防火墙将看起来像这样

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

这应该是您在防火墙方面需要的一切。

现在您应该能够看到一个看起来像这样的网页

The Nginx welcome page

它并不多,但这意味着服务器正在运行。您也可以使用命令行测试您的网页是否正常工作

curl -I http://[your-ip-address]

创建服务器用户并更改网站根文件夹

虽然您可以将您的网站直接放到默认目录并运行(这对Nginx在容器中运行或在测试/开发服务器上运行时可能没问题),但这并非最佳实践。相反,创建一个特定的 Linux 用户用于您的网站,并将您的网站文件放在专门为该用户创建的目录中是一个好主意。

如果您想构建多个网站,您应该为组织和安全创建不同的用户和根目录。

在本指南中,我将只使用一个用户:一个名叫“www”的帅哥。决定将您的网站文件放在哪里会变得更加复杂。

您可以将您的网站文件放在多个地方,具体取决于您的服务器设置。如果您使用的是裸机(物理)服务器,或者您正在直接在 VPS 上安装nginx,那么您可能正在运行 Security Enhanced Linux (SELinux)。 SELinux 是一种工具,它在很大程度上保护您的机器,但它也决定了您可以将某些东西放在哪里,例如网页。

因此,如果您将nginx直接安装到您的机器,您需要将您的网站放在默认根文件夹子目录中。在这种情况下,默认根目录是/usr/share/nginx/html,因此“www”用户的网站可能放在/usr/share/nginx/html/www中。

但是,如果您在 LXD/LXC 等容器中运行nginx,SELinux 可能不会安装,您可以将您的文件放在您喜欢的任何地方。在这种情况下,我喜欢将所有用户的网站文件放在普通主文件夹中的目录下,例如:/home/www/

尽管如此,我将继续本指南,就像 SELinux 已安装一样。根据您的用例,您只需更改所需的内容即可。您也可以在我们关于该主题的指南中了解更多关于 SELinux 如何工作的信息。

创建用户

首先,我们创建我们要使用的文件夹

sudo mkdir /usr/share/nginx/html/www

接下来,创建 www 组

sudo groupadd www

然后,我们创建用户

sudo adduser -G nginx -g www -d /usr/share/nginx/html/www www --system --shell=/bin/false

该命令告诉机器

  • 创建一个名为“www”的用户(根据中间的文本),
  • 将所有文件放在/usr/share/nginx/html/www中,
  • 并将其添加到以下组中:“nginx”作为辅助组,“www”作为主组。
  • --system标志表示用户不是人类用户,而是为系统保留的。如果您想创建人类用户帐户来管理不同的网站,那就需要另一份指南了。
  • --shell=/bin/false确保没有人可以尝试以“www”用户身份登录。

“nginx”组会做一些真正的魔法。它允许 Web 服务器读取和修改属于“www”用户和“www”用户组的文件。有关更多信息,请参阅 Rocky Linux用户管理指南

更改服务器根文件夹

现在您已经拥有了您喜欢的全新用户帐户,是时候让nginx在该文件夹中查找您的网站文件了。再次抓住您喜欢的文本编辑器。

现在,只需运行

sudo nano /etc/nginx/conf.d/default.conf

当文件打开时,找到看起来像root /usr/share/nginx/html;的那一行。将其更改为您选择的网站根文件夹,例如root /usr/share/nginx/html/www;(或如果您在容器中运行nginx,则为/home/www)。保存并关闭文件,然后测试您的nginx配置以确保您没有跳过分号或其他内容

nginx -t

如果您收到以下成功消息,则一切顺利

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

然后,使用以下命令对服务器进行软重启

sudo systemctl reload nginx

注意

如果软重启不起作用,则用以下命令给nginx一个猛击

sudo systemctl restart nginx

您新根文件夹中的所有 HTML 文件现在应该可以通过…您的浏览器进行浏览。

更改文件权限

必须正确设置权限才能确保nginx可以读取、写入和执行网站目录中的任何文件。

首先,确保根文件夹中的所有文件都由服务器用户及其用户组拥有

sudo chown -R www:www /usr/share/nginx/html/www

然后,为了确保想要浏览您网站的用户实际上可以看到页面,请运行以下命令(是的,这些分号很重要)

sudo find /usr/share/nginx/html/www -type d -exec chmod 555 "{}" \;
sudo find /usr/share/nginx/html/www -type f -exec chmod 444 "{}" \;

这基本上给了每个人查看服务器上文件的权利,但不能修改它们。只有 root 用户和服务器用户才能这样做。

为您的网站获取 SSL 证书

截至目前,我们的使用 certbot 获取 SSL 证书的指南已更新,其中包含一些关于nginx的基本说明。去看看,因为它包含有关安装 certbot 以及生成证书的完整说明。

浏览器可能会停止让人们看到没有证书的网站的时代即将到来,因此请确保为每个网站获取一个证书。

其他配置选项和指南

SELinux 规则

请注意,当强制执行时,nginx proxy_pass 指令将失败,并出现“502 Bad Gateway”

您可以为开发目的禁用 setenforce

sudo setenforce 0

或者您可以在/var/log/audit/audit.log中启用httpd或其他与 nginx 相关的服务

sudo setsebool httpd_can_network_connect 1 -P

结论

nginx 的基本安装和配置很容易,即使要获得最新版本比它应该的要复杂。但是,按照这些步骤操作,您将很快拥有最佳的服务器选项之一。

现在您只需要给自己创建一个网站吗?那需要多长时间,十分钟?在网页设计师中默默啜泣

作者:Ezequiel Bruni

贡献者:Antoine Le Morvan、Steven Spencer、Ganna Zhyrnova