如何在 CentOS 上安装高性能 Web 服务器 Nginx
引言
在当今互联网世界中,高性能和高可用性是构建现代 Web 应用的关键。而 Nginx(发音:engine-x)正是一款为满足这些需求而设计的开源 Web 服务器、反向代理服务器、邮件代理服务器及通用 TCP/UDP 代理服务器。自其诞生以来,Nginx 以其卓越的性能、极低的资源消耗和高并发处理能力迅速崛起,成为许多高流量网站和应用的首选。
CentOS(社区企业操作系统)是一个基于 Red Hat Enterprise Linux (RHEL) 的稳定、免费的企业级 Linux 发行版,广泛应用于服务器环境。将高性能的 Nginx 部署在稳定可靠的 CentOS 系统上,是许多系统管理员和开发者构建强大网络服务的基础。
本文将详细介绍如何在 CentOS 系统上安装 Nginx。我们将探讨几种不同的安装方法,从最简单快捷的方式到更灵活但稍微复杂的方法,帮助你根据自己的需求选择最合适的安装途径。无论你是初次接触 Nginx 的新手,还是希望深入了解不同安装选项的进阶用户,本文都将为你提供清晰、详尽的指导。
我们将涵盖以下主要内容:
- 安装 Nginx 的前提条件。
- 使用 CentOS 官方仓库安装 Nginx(最简便)。
- 使用 Nginx 官方仓库安装 Nginx(获取最新稳定或主线版本)。
- 从源代码编译安装 Nginx(最大程度的自定义和优化)。
- 安装后的基本配置和管理。
- 防火墙设置。
- 常见问题与排查。
准备好了吗?让我们开始 Nginx 在 CentOS 之旅!
1. 安装 Nginx 的前提条件
在开始安装过程之前,请确保你的 CentOS 系统满足以下基本要求:
- 一个运行中的 CentOS 系统: 本文以 CentOS 7 或 CentOS 8 为例进行讲解。不同版本的 CentOS 在包管理器(yum vs dnf)和一些系统服务管理方面可能略有差异,但核心步骤相似。CentOS 7 使用
yum
,CentOS 8 使用dnf
(通常dnf
命令可以直接替代yum
)。我们主要使用yum
命令进行演示,因为它在 CentOS 系统中更为经典和通用。 - root 用户权限或具有 sudo 权限的用户: 安装软件和修改系统配置需要相应的权限。建议使用具有
sudo
权限的普通用户进行操作,这比直接使用 root 用户更安全。 - 互联网连接: 需要从软件仓库或官方网站下载 Nginx 安装包或源代码。
- 基本的 Linux 命令行操作知识: 需要熟悉使用终端执行命令。
在进行任何安装之前,一个良好的实践是更新系统已有的软件包到最新版本。这可以解决潜在的兼容性问题,并确保系统拥有最新的安全补丁。打开终端,执行以下命令:
bash
sudo yum update -y
或者在 CentOS 8+ 上使用 dnf
:
bash
sudo dnf update -y
-y
选项会自动确认所有提示,无需手动输入 y
。这个过程可能需要一些时间,取决于你的系统多久没有更新以及网络状况。
2. 使用 CentOS 官方仓库安装 Nginx
这是在 CentOS 上安装 Nginx 最简单快捷的方法。通过 CentOS 的默认软件仓库安装的版本通常是稳定且经过测试的,但可能不是最新的版本。这适用于对 Nginx 版本要求不高,只求快速搭建一个 Web 服务器或反向代理的场景。
优点:
* 安装过程简单快捷。
* 软件版本稳定,兼容性好。
* 易于管理(升级、卸载)通过包管理器。
缺点:
* 提供的 Nginx 版本可能不是最新的。
* 编译时包含的模块可能有限(通常包含常用模块)。
安装步骤:
步骤 2.1:搜索 Nginx 包
在安装之前,可以先搜索一下官方仓库中是否包含 Nginx 包以及可用的版本信息:
bash
sudo yum search nginx
或使用 dnf
:
bash
sudo dnf search nginx
命令输出会列出所有包含 nginx
关键词的软件包。通常你会看到 nginx.x86_64
,这就是我们需要的 Web 服务器包。
步骤 2.2:安装 Nginx
确认包名后,执行安装命令:
bash
sudo yum install nginx -y
或使用 dnf
:
bash
sudo dnf install nginx -y
包管理器会自动下载 Nginx 包及其依赖项,并完成安装过程。
步骤 2.3:启动 Nginx 服务
安装完成后,Nginx 服务并不会自动启动。你需要手动启动它:
bash
sudo systemctl start nginx
systemctl
是 CentOS 7/8 中用于管理 systemd 服务的命令。start
参数用于启动服务。
步骤 2.4:设置 Nginx 开机自启
为了确保服务器重启后 Nginx 能够自动运行,你需要启用 Nginx 服务的开机自启:
bash
sudo systemctl enable nginx
此命令会在适当的运行级别下创建符号链接,使 Nginx 在系统启动时自动启动。如果命令输出显示 Created symlink ...
则表示设置成功。
步骤 2.5:检查 Nginx 服务状态
你可以使用以下命令来检查 Nginx 服务的运行状态:
bash
sudo systemctl status nginx
如果 Nginx 正在正常运行,你会看到类似 active (running)
的输出信息。
至此,你已经成功使用 CentOS 官方仓库安装并启动了 Nginx。接下来我们将介绍另一种获取较新版本 Nginx 的方法。
3. 使用 Nginx 官方仓库安装 Nginx
CentOS 官方仓库中的 Nginx 版本更新可能不那么及时。如果需要安装最新稳定版(stable)或主线版(mainline)的 Nginx,推荐使用 Nginx 官方提供的仓库。官方仓库通常提供更频繁的更新和最新的功能及性能改进。
Nginx 官方仓库分为两个版本:
* Stable(稳定版): 版本更新较慢,但经过更长时间的测试,更稳定可靠。
* Mainline(主线版): 版本更新较快,包含最新功能和优化,但可能存在一些新引入的 bug。
选择哪个版本取决于你的需求,对于生产环境,通常建议使用稳定版;对于开发或测试环境,或者需要最新功能时,可以选择主线版。
优点:
* 可以方便地安装最新稳定版或主线版 Nginx。
* 更新及时,可以获取最新的功能和性能改进。
缺点:
* 需要手动添加 Nginx 官方仓库。
* 相较于系统自带仓库,可能偶尔遇到兼容性问题(虽然很少见)。
安装步骤:
步骤 3.1:添加 Nginx 官方仓库
Nginx 官方为 RHEL 及其衍生系统(包括 CentOS)提供了 yum
或 dnf
仓库。你需要创建一个新的仓库文件来指向 Nginx 官方仓库。
打开终端,使用文本编辑器(如 nano
或 vim
)创建并编辑 /etc/yum.repos.d/nginx.repo
文件:
bash
sudo yum install nano -y # 如果系统中没有nano,先安装
sudo nano /etc/yum.repos.d/nginx.repo
将以下内容粘贴到文件中。请注意: 有两个不同的配置块,一个用于稳定版,一个用于主线版。你只需要选择其中一个,并在你选择的那个块前面删除 #
号,取消注释,同时将另一个块的所有行都用 #
注释掉。
Nginx 官方仓库配置文件 (/etc/yum.repos.d/nginx.repo
) 内容:
“`ini
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=http://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0 # 注意这里默认是0,如果你选择安装主线版,需要将enabled改为1
gpgkey=http://nginx.org/keys/nginx_signing.key
module_hotfixes=true
“`
[nginx-stable]
或[nginx-mainline]
:仓库的唯一标识符。name
:仓库的描述性名称。baseurl
:仓库的 URL。$releasever
会被替换为你的 CentOS 版本号(如 7 或 8),$basearch
会被替换为系统架构(如 x86_64)。gpgcheck=1
:启用 GPG 签名检查,确保下载的包是官方发布的,没有被篡改。enabled=1
或enabled=0
:是否默认启用此仓库。安装稳定版时,将nginx-stable
的enabled
设置为1
并注释掉nginx-mainline
;安装主线版时,将nginx-mainline
的enabled
设置为1
并注释掉nginx-stable
。gpgkey
:Nginx 官方用于签名的 GPG 密钥 URL。包管理器会下载并验证此密钥。module_hotfixes=true
: 允许安装来自此仓库的模块更新,即使它们与基本操作系统仓库中的包有冲突。
编辑完成后,保存并关闭文件。在 nano 中是按 Ctrl+X
,然后输入 Y
,再按回车。
步骤 3.2:安装 Nginx
添加仓库并配置完成后,就可以像从系统自带仓库安装一样使用 yum
或 dnf
安装 Nginx 了。包管理器会自动识别并使用你刚刚添加的 Nginx 官方仓库。
bash
sudo yum install nginx -y
或使用 dnf
:
bash
sudo dnf install nginx -y
如果你的系统已经安装了来自 CentOS 仓库的 Nginx,这个命令会提示你升级到 Nginx 官方仓库提供的版本。确认即可。
步骤 3.3:启动和启用 Nginx 服务
安装完成后,同样需要启动并设置 Nginx 服务开机自启:
bash
sudo systemctl start nginx
sudo systemctl enable nginx
步骤 3.4:检查 Nginx 服务状态
bash
sudo systemctl status nginx
通过这种方法安装的 Nginx 版本会比 CentOS 官方仓库中的新。你可以通过 nginx -v
命令查看安装的 Nginx 版本。
4. 从源代码编译安装 Nginx
从源代码编译安装 Nginx 提供了最大的灵活性和自定义能力。你可以选择需要包含的模块,例如特定的第三方模块,或者对编译选项进行优化以获得更好的性能。然而,这种方法也更为复杂,需要手动处理依赖关系、配置、编译、安装以及创建系统服务文件。
这种方法适用于以下场景:
* 需要安装最新开发版或特定版本的 Nginx。
* 需要集成非标准模块(如 ngx_pagespeed
等)。
* 需要对 Nginx 进行深度定制或性能优化。
优点:
* 最大程度的自定义能力,可以自由选择模块。
* 可以安装任意版本。
* 可能通过编译优化获得更好的性能(取决于具体优化和硬件)。
缺点:
* 过程复杂,容易出错。
* 需要手动解决依赖关系。
* 升级和卸载不如包管理器方便。
* 需要手动创建 systemd 服务文件。
安装步骤:
步骤 4.1:安装编译所需的工具和依赖库
编译 Nginx 需要一些开发工具和依赖库。Nginx 的核心功能依赖于 PCRE(Perl Compatible Regular Expressions)、zlib(用于文件压缩)和 OpenSSL(用于 SSL/TLS 支持)。
安装开发工具集:
bash
sudo yum groupinstall "Development Tools" -y
或使用 dnf
:
bash
sudo dnf groupinstall "Development Tools" -y
安装依赖库:
bash
sudo yum install pcre-devel zlib-devel openssl-devel -y
或使用 dnf
:
bash
sudo dnf install pcre-devel zlib-devel openssl-devel -y
pcre-devel
:提供 PCRE 库的开发文件,Nginx 使用它来实现正则表达式的支持,主要用于解析 rewrite 指令。zlib-devel
:提供 zlib 库的开发文件,Nginx 使用它来实现对 HTTP 响应的 gzip 压缩。openssl-devel
:提供 OpenSSL 库的开发文件,Nginx 使用它来实现 SSL/TLS 加密传输(HTTPS)。
步骤 4.2:创建 Nginx 用户和组
出于安全考虑,Nginx 通常不以 root 用户运行其工作进程。建议创建一个专门的用户和组来运行 Nginx 工作进程。
bash
sudo groupadd nginx
sudo useradd -r -g nginx -s /sbin/nologin -M nginx
groupadd nginx
:创建一个名为nginx
的组。useradd
:创建一个用户。-r
:创建一个系统用户。-g nginx
:指定用户的主组为nginx
。-s /sbin/nologin
:将用户的 shell 设置为/sbin/nologin
,禁止该用户登录系统。-M
:不为该用户创建主目录。nginx
:要创建的用户名。
步骤 4.3:下载 Nginx 源代码
访问 Nginx 官方网站(https://nginx.org/en/download.html)获取最新稳定版或主线版的源代码下载链接。选择 .tar.gz
格式的链接。
例如,下载当前最新的稳定版(请根据官网实际版本号替换下面的链接):
bash
cd /usr/local/src/ # 建议在 /usr/local/src/ 目录下载源代码
sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz # 替换为实际的下载链接
步骤 4.4:解压源代码
下载完成后,解压下载的源代码文件:
bash
sudo tar -xzf nginx-1.24.0.tar.gz # 替换为实际的文件名
解压后会生成一个同名的目录,进入该目录:
bash
cd nginx-1.24.0 # 替换为实际的目录名
步骤 4.5:配置编译选项
这是编译安装中最关键的一步。通过运行 ./configure
脚本,你可以指定 Nginx 的安装路径、模块以及其他编译选项。
以下是一个常见的 ./configure
示例,包含了常用的模块和路径设置:
bash
sudo ./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/run/nginx.pid \
--lock-path=/run/lock/subsys/nginx \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-zlib \
--with-file-aio \
--with-threads
选项解释:
--prefix=/usr/local/nginx
:指定 Nginx 的安装目录。所有 Nginx 相关文件都会安装到这个目录下。--sbin-path=/usr/local/nginx/sbin/nginx
:指定 Nginx 可执行文件的路径。--conf-path=/etc/nginx/nginx.conf
:指定主要的配置文件路径。我们选择/etc/nginx/nginx.conf
是为了与包管理器安装的位置保持一致,方便管理。--pid-path=/run/nginx.pid
:指定存储主进程 PID 的文件路径。--lock-path=/run/lock/subsys/nginx
:指定锁文件路径。--error-log-path=/var/log/nginx/error.log
:指定错误日志路径。--http-log-path=/var/log/nginx/access.log
:指定访问日志路径。--user=nginx
和--group=nginx
:指定 Nginx 工作进程运行的用户和组,我们使用了前面创建的nginx
用户和组。--with-http_ssl_module
:启用 HTTP SSL 模块,用于支持 HTTPS。--with-http_v2_module
:启用 HTTP/2 模块,用于支持 HTTP/2 协议(需要 OpenSSL 1.0.2+)。--with-http_realip_module
:启用 Real IP 模块,用于获取通过代理服务器转发的客户端真实 IP 地址。--with-http_stub_status_module
:启用 Stub Status 模块,用于查看 Nginx 的基本状态信息。--with-http_gzip_static_module
:启用 Gzip Static 模块,允许 Nginx 直接发送预压缩的.gz
文件。--with-pcre
:强制使用 PCRE 库(即使系统中已安装开发库)。--with-zlib
:强制使用 zlib 库(即使系统中已安装开发库)。--with-file-aio
:启用异步文件 I/O。--with-threads
:启用线程池(用于提高 I/O 密集型任务性能)。
这只是一部分常用的模块和选项。你可以在运行 ./configure --help
命令查看所有可用的选项和模块。如果你需要添加第三方模块,通常是在 ./configure
命令中通过 --add-module=PATH_TO_MODULE
选项来指定。
./configure
脚本会检查系统环境、所需的库以及你指定的选项,生成 Makefile 文件。如果缺少依赖库,会报错提示。
步骤 4.6:编译源代码
./configure
成功后,就可以开始编译 Nginx 了。
bash
sudo make
make
命令会根据 Makefile 文件编译源代码。这个过程可能需要几分钟到十几分钟不等,取决于你的服务器性能。
步骤 4.7:安装 Nginx
编译成功后,执行安装命令:
bash
sudo make install
make install
命令会将编译好的 Nginx 可执行文件、配置文件、HTML 文件等复制到 --prefix
指定的安装目录 (/usr/local/nginx
) 以及 --conf-path
指定的配置目录 (/etc/nginx
)。
安装完成后,Nginx 可执行文件通常位于 /usr/local/nginx/sbin/nginx
,主配置文件位于 /etc/nginx/nginx.conf
。
步骤 4.8:创建 systemd 服务文件
通过源代码安装的 Nginx 不会自动创建 systemd 服务文件,你需要手动创建它,以便使用 systemctl
命令来方便地管理 Nginx 服务。
创建文件 /etc/systemd/system/nginx.service
:
bash
sudo nano /etc/systemd/system/nginx.service
将以下内容复制到文件中:
“`ini
[Unit]
Description=nginx – high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
“`
解释:
[Unit]
部分定义了服务的描述、文档链接以及启动依赖(在网络、远程文件系统和名称服务可用之后启动)。[Service]
部分定义了服务的行为:Type=forking
:表示 Nginx 主进程启动后会 fork 出工作进程并在后台运行。PIDFile=/run/nginx.pid
:指定 PID 文件路径,与我们./configure
时指定的--pid-path
一致。ExecStartPre
:在启动服务前执行的命令,这里用于检查 Nginx 配置文件的语法是否正确。-t
参数用于测试配置,-c
参数指定配置文件路径。ExecStart
:启动服务的命令,指定 Nginx 可执行文件的路径和配置文件路径。ExecReload
:重新加载配置文件的命令。nginx -s reload
会向 Nginx 主进程发送 HUP 信号,使其重新加载配置文件并启动新的工作进程,旧的工作进程处理完当前请求后退出,实现平滑重启。ExecStop
:停止服务的命令。nginx -s quit
会向 Nginx 主进程发送 QUIT 信号,使其优雅地退出(等待工作进程处理完请求后退出)。PrivateTmp=true
:为服务分配私有的/tmp
和/var/tmp
目录,提高安全性。
[Install]
部分定义了服务如何安装,WantedBy=multi-user.target
表示该服务应该在多用户运行级别下启动。
保存并关闭文件。
步骤 4.9:重新加载 systemd 管理器
创建或修改了 systemd 服务文件后,需要通知 systemd 重新加载配置:
bash
sudo systemctl daemon-reload
步骤 4.10:启动 Nginx 服务
现在可以使用 systemctl
命令来启动 Nginx 服务了:
bash
sudo systemctl start nginx
步骤 4.11:设置 Nginx 开机自启
bash
sudo systemctl enable nginx
步骤 4.12:检查 Nginx 服务状态
bash
sudo systemctl status nginx
如果一切顺利,Nginx 应该已经启动并运行了。
5. 安装后的基本配置和管理
无论是通过哪种方式安装的 Nginx,安装完成后都需要进行一些基本的配置和管理操作。
5.1 Nginx 配置文件
Nginx 的主要配置文件通常位于 /etc/nginx/nginx.conf
。除了主配置文件,Nginx 通常还会包含其他配置文件,例如在 /etc/nginx/conf.d/
目录下存放虚拟主机(server blocks)的配置文件。
主配置文件 /etc/nginx/nginx.conf
定义了全局设置、事件模型以及 HTTP 块。HTTP 块内部通常包含 server
块,每个 server
块定义了一个虚拟主机。server
块内部又包含 location
块,用于匹配特定的请求路径并定义如何处理这些请求。
如果你是从源代码安装的 Nginx,make install
会安装一个默认的 nginx.conf
文件到 /etc/nginx/
。如果是通过包管理器安装的,配置文件也是在这里。
在修改配置文件之前,建议备份原始文件:
bash
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
你可以使用文本编辑器编辑配置文件,例如:
bash
sudo nano /etc/nginx/nginx.conf
或者编辑 /etc/nginx/conf.d/default.conf
(如果存在的话,包管理器安装的通常会有此文件):
bash
sudo nano /etc/nginx/conf.d/default.conf
5.2 检查配置文件语法
在重新加载或重启 Nginx 服务之前,强烈建议检查配置文件的语法是否正确,以避免服务启动失败。
使用以下命令检查语法(对于包管理器安装,可执行文件通常在 /usr/sbin/nginx
或 /usr/bin/nginx
;对于源代码安装,如上文示例,在 /usr/local/nginx/sbin/nginx
。请根据你的实际安装路径调整命令):
对于包管理器安装:
bash
sudo nginx -t
或者指定配置文件路径(更保险):
bash
sudo nginx -t -c /etc/nginx/nginx.conf
对于源代码安装(根据你的 --sbin-path
路径):
bash
sudo /usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
如果配置文件语法正确,会看到类似 nginx: configuration file /etc/nginx/nginx.conf syntax is ok
和 nginx: configuration file /etc/nginx/nginx.conf test is successful
的输出。如果有错误,会提示具体的错误位置,你需要回去修改配置文件。
5.3 管理 Nginx 服务
使用 systemctl
命令来管理 Nginx 服务:
- 启动服务:
bash
sudo systemctl start nginx - 停止服务:
bash
sudo systemctl stop nginx - 重启服务:
bash
sudo systemctl restart nginx
重启会完全停止 Nginx 再重新启动,期间服务会短暂中断。 - 重新加载配置文件(平滑重启):
bash
sudo systemctl reload nginx
这是修改配置后推荐使用的方法。Nginx 会加载新的配置,并在新的工作进程中使用新配置,旧的工作进程会优雅地退出,不会中断当前正在处理的请求。 - 查看服务状态:
bash
sudo systemctl status nginx - 禁用开机自启:
bash
sudo systemctl disable nginx - 启用开机自启:
bash
sudo systemctl enable nginx
6. 防火墙设置
默认情况下,CentOS 的防火墙(firewalld
或 iptables
)可能会阻止外部对服务器 80(HTTP)和 443(HTTPS)端口的访问。你需要配置防火墙规则来允许这些端口的流量。
CentOS 7 及更新版本默认使用 firewalld
。
步骤 6.1:检查 firewalld 状态
确保 firewalld
服务正在运行:
bash
sudo systemctl status firewalld
如果不在运行,可以启动它并设置开机自启:
bash
sudo systemctl start firewalld
sudo systemctl enable firewalld
步骤 6.2:允许 HTTP 和 HTTPS 服务
使用 firewall-cmd
命令永久允许 HTTP (80) 和 HTTPS (443) 服务:
bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
--permanent
选项使得规则在防火墙重启后依然生效。
步骤 6.3:重新加载防火墙规则
修改永久规则后,需要重新加载 firewalld
才能使新规则立即生效:
bash
sudo firewall-cmd --reload
现在,外部用户应该能够通过 HTTP 和 HTTPS 访问你的 Nginx 服务器了。
对于使用 iptables
的旧系统或特定配置,你需要编辑 iptables
规则文件(通常在 /etc/sysconfig/iptables
)或使用 iptables
命令来添加类似的规则。例如:
“`bash
允许 HTTP
sudo iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
允许 HTTPS
sudo iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
保存规则
sudo service iptables save # 可能需要安装 iptables-services 包
“`
7. 测试 Nginx 安装
完成安装和防火墙配置后,就可以测试 Nginx 是否正常工作了。
在你的客户端浏览器中,输入你的 CentOS 服务器的 IP 地址或域名。
如果 Nginx 成功启动并且防火墙配置正确,你应该能看到 Nginx 的欢迎页面。这个页面通常位于 /usr/share/nginx/html/index.html
(对于包管理器安装)或 /usr/local/nginx/html/index.html
(对于源代码安装,取决于 configure
时的 --prefix
)。
如果你没有看到欢迎页面,或者页面无法访问,请检查以下几点:
- Nginx 服务是否正在运行 (
sudo systemctl status nginx
)。 - Nginx 配置文件的语法是否正确 (
sudo nginx -t
)。 - 防火墙是否允许 80 和 443 端口 (
sudo firewall-cmd --list-services
或sudo iptables -L -n
)。 - SELinux 是否阻止了 Nginx 的运行或对文件目录的访问。SELinux 问题比较复杂,可以暂时将 SELinux 设置为 Permissive 模式进行测试 (
sudo setenforce 0
),如果可以访问,说明是 SELinux 导致的问题,需要配置相应的 SELinux 策略,不建议长期关闭或设置为 Permissive。
8. 常见问题与排查
- Nginx 启动失败:
- 检查日志文件:
/var/log/nginx/error.log
会记录 Nginx 的错误信息。 - 检查配置文件语法:
sudo nginx -t
。 - 检查端口是否被占用:
sudo ss -tulnp | grep 80
或sudo netstat -tulnp | grep 80
(如果ss
或netstat
命令不可用,可能需要安装iproute
或net-tools
包)。确保没有其他程序占用了 Nginx 需要监听的端口。
- 检查日志文件:
- 无法从外部访问 Nginx:
- 检查服务器防火墙 (
firewalld
或iptables
) 设置。 - 检查云服务提供商的安全组/防火墙规则。
- 检查网络连接。
- 检查 SELinux 状态。
- 检查服务器防火墙 (
- 源代码编译问题:
- 检查是否安装了所有必需的依赖库 (
pcre-devel
,zlib-devel
,openssl-devel
等)。 - 检查
./configure
命令的输出,看是否有报错。 - 检查
make
命令的输出,看是否有编译错误。
- 检查是否安装了所有必需的依赖库 (
9. 总结与展望
本文详细介绍了在 CentOS 系统上安装 Nginx 的三种主要方法:使用 CentOS 官方仓库、使用 Nginx 官方仓库以及从源代码编译安装。每种方法都有其优缺点和适用场景。对于大多数用户而言,使用 Nginx 官方仓库是获取最新稳定版本同时享受包管理器便利性的良好折衷。而从源代码编译则提供了无与伦比的灵活性,适合需要定制和优化的高级用户。
安装完成后,我们还讲解了如何管理 Nginx 服务、进行基本的配置文件语法检查、设置防火墙规则以及如何测试安装。
Nginx 的强大之处远不止于此,它还可以作为高性能的反向代理、负载均衡器、HTTP 缓存等。掌握了基本的安装和管理后,你可以进一步学习 Nginx 的高级配置,例如:
- 配置虚拟主机(Server Blocks)托管多个网站。
- 配置 SSL/TLS 证书启用 HTTPS。
- 设置反向代理和负载均衡。
- 配置 HTTP 缓存。
- 使用 fastcgi_pass 或 uwsgi_pass 与后端应用服务器(如 PHP-FPM, Gunicorn, uWSGI)通信。
- 优化 Nginx 配置以提升性能。
希望这篇详细的指南能够帮助你在 CentOS 系统上成功安装和运行 Nginx,为你构建高性能的网络服务打下坚实的基础。祝你在 Nginx 的世界里探索愉快!