如何在 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:
这应该是您在防火墙方面需要的一切。
现在您应该能够看到一个看起来像这样的网页
它并不多,但这意味着服务器正在运行。您也可以使用命令行测试您的网页是否正常工作
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 以及生成证书的完整说明。
浏览器可能会停止让人们看到没有证书的网站的时代即将到来,因此请确保为每个网站获取一个证书。
其他配置选项和指南¶
- 如果您想了解如何让Nginx与 PHP(特别是 PHP-FPM)一起工作,请查看我们的Rocky Linux 上 PHP 指南。
- 如果您想了解如何为多个网站设置Nginx,我们现在有一个关于该主题的指南。
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