Linux 环境下 Nginx 详细安装指南
引言
在当今互联网世界,高效、稳定、高性能的 Web 服务器扮演着至关重要的角色。Nginx(发音为 “engine-x”)正是这样一款杰出的软件。它是一款高性能的开源 Web 服务器,同时也是一个强大的反向代理服务器、负载均衡器和 HTTP 缓存。因其卓越的并发处理能力和低内存消耗,Nginx 被广泛应用于各种规模的网站和服务中,尤其在高流量场景下表现出色。
本文将为您提供一份详尽的 Linux 环境下 Nginx 安装指南。我们将涵盖两种主要的安装方法:使用发行版自带的包管理器进行安装(推荐用于大多数用户)和从源代码编译安装(提供更大的灵活性,适合需要特定模块或最新版本的用户)。无论您是初学者还是有经验的系统管理员,本指南都将帮助您顺利完成 Nginx 的安装与基本配置。
在开始之前,请确保您具备以下条件:
* 一台运行 Linux 操作系统的服务器或虚拟机。
* 具有 root 或 sudo 权限的用户账户。
* 稳定的互联网连接,用于下载安装文件和依赖项。
本文将以常见的 Linux 发行版为例进行说明,包括基于 Debian 的系统(如 Ubuntu)和基于 RHEL 的系统(如 CentOS、Fedora、AlmaLinux、Rocky Linux)。
第一部分:准备工作
在进行任何安装之前,我们首先需要更新系统软件包列表,以确保您安装的软件是最新版本,并且依赖关系能够得到正确解决。
更新系统软件包
打开您的终端,执行以下命令:
-
对于基于 Debian 的系统 (如 Ubuntu):
bash
sudo apt update
sudo apt upgrade
sudo apt update
会从配置的软件源下载最新的软件包列表信息。
sudo apt upgrade
会升级所有当前已安装的、有新版本的软件包。 -
对于基于 RHEL 的系统 (如 CentOS, Fedora, AlmaLinux, Rocky Linux):
bash
sudo yum update -y
# 或者使用 dnf (Fedora,较新版本的CentOS/AlmaLinux/Rocky Linux)
sudo dnf update -y
sudo yum update -y
(或dnf update -y
) 会检查并更新所有已安装的软件包。-y
参数表示自动确认所有提示,无需手动输入 ‘y’。
完成系统更新是良好的实践,可以避免潜在的依赖性问题或安全漏洞。
第二部分:使用包管理器安装 Nginx(推荐)
使用 Linux 发行版自带的包管理器安装 Nginx 是最简单、最快捷的方式。这种方法的好处包括:
* 简便快捷: 只需几条命令即可完成安装。
* 依赖管理: 包管理器会自动处理 Nginx 所需的依赖库。
* 易于更新: 通过包管理器即可轻松更新 Nginx 版本。
* 系统集成: Nginx 服务通常会集成到系统的初始化系统(如 systemd),方便管理。
缺点是,通过这种方式安装的 Nginx 版本可能不是最新的稳定版,并且可能不包含最新的模块或特性。如果您需要最新的功能或特定的模块,可能需要考虑从源代码安装。
方法 2.1:从发行版官方仓库安装
这是最常见和最简单的安装方式。
对于基于 Debian 的系统 (如 Ubuntu)
-
安装 Nginx:
bash
sudo apt install nginx
系统会提示您确认安装,输入Y
并按回车即可。apt
会自动下载 Nginx 及其所有必需的依赖项并进行安装。 -
验证安装:
安装完成后,Nginx 服务通常会自动启动。您可以通过以下命令检查其状态:
bash
sudo systemctl status nginx
如果服务正在运行,您会看到类似 “active (running)” 的输出。如果未运行,可以使用sudo systemctl start nginx
启动它。 -
设置开机自启:
通常安装时会默认设置为开机自启,但您可以再次确认或手动设置:
bash
sudo systemctl enable nginx
对于基于 RHEL 的系统 (如 CentOS, Fedora, AlmaLinux, Rocky Linux)
-
安装 Nginx:
bash
sudo yum install nginx -y
# 或者使用 dnf
sudo dnf install nginx -y
yum
或dnf
会自动下载 Nginx 及其依赖项并安装。 -
验证安装:
安装完成后,Nginx 服务可能不会立即启动。您需要手动启动它并检查状态:
bash
sudo systemctl start nginx
sudo systemctl status nginx
确认服务状态为 “active (running)”。 -
设置开机自启:
bash
sudo systemctl enable nginx
方法 2.2:从 Nginx 官方仓库安装(获取最新稳定版或主线版)
如果您希望安装 Nginx 的最新稳定版或主线版(Mainline version),而不是发行版仓库中可能较旧的版本,可以添加 Nginx 官方仓库。
对于基于 Debian 的系统 (如 Ubuntu)
-
安装必要的工具和依赖:
bash
sudo apt update
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring -y
这些工具用于下载 GPG 密钥、管理证书和识别发行版信息。 -
导入 Nginx 官方签名密钥:
bash
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
这将下载签名密钥并将其保存到/usr/share/keyrings/nginx-archive-keyring.gpg
文件中,用于验证 Nginx 包的完整性和来源。 -
验证密钥指纹:
为了安全起见,验证下载的密钥指纹是否正确。最新的指纹信息可以在 Nginx 官网找到 (https://nginx.org/en/linux_packages.html)。
bash
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
输出应该包含pub rsa4096 2011-08-19 [SC]
和A916 6844 2EE0 EFD9 C8E9 ... B064 69B7 28B3
(指纹会变化,请查阅官网核对)。 -
添加 Nginx 仓库到 apt 源列表:
根据您的 Ubuntu 版本,选择对应的仓库。通常,您需要知道您的发行版代号(例如 focal, jammy, noble 等)。您可以使用lsb_release -cs
命令获取代号。- 对于主线版本 (Mainline): 提供最新功能和Bug修复,可能包含少量新问题。
bash
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list - 对于稳定版本 (Stable): 提供经过充分测试的版本,功能相对稳定。
bash
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
选择其中一个添加到/etc/apt/sources.list.d/nginx.list
文件中。
- 对于主线版本 (Mainline): 提供最新功能和Bug修复,可能包含少量新问题。
-
更新 apt 软件包列表并安装 Nginx:
bash
sudo apt update
sudo apt install nginx -y
如果您之前已经安装了Nginx,这个命令会升级到官方仓库的版本。 -
验证安装:
bash
sudo systemctl status nginx
sudo systemctl enable nginx
nginx -v # 查看安装的Nginx版本,确认来自官方仓库
对于基于 RHEL 的系统 (如 CentOS Stream, AlmaLinux, Rocky Linux, Fedora)
-
安装必要的工具和依赖:
bash
sudo yum install yum-utils -y
# 或者使用 dnf
sudo dnf install dnf-utils -y
yum-utils
或dnf-utils
提供了yum-config-manager
或dnf config-manager
工具,用于方便地添加仓库。 -
添加 Nginx 仓库:
-
对于主线版本 (Mainline):
bash
sudo yum-config-manager --add-repo https://nginx.org/packages/mainline/centos/nginx.repo
# 或者对于RHEL/AlmaLinux/Rocky Linux 8/9 使用 dnf:
# sudo dnf config-manager --add-repo https://nginx.org/packages/mainline/centos/nginx.repo
# 对于Fedora 使用 dnf:
# sudo dnf config-manager --add-repo https://nginx.org/packages/mainline/fedora/nginx.repo
请注意,对于较新的 RHEL 衍生版 (如 AlmaLinux 8/9, Rocky Linux 8/9),它们通常与 CentOS 兼容,可以使用centos
的仓库地址。Fedora 有自己的仓库地址。请根据您的具体发行版选择。 -
对于稳定版本 (Stable):
bash
sudo yum-config-manager --add-repo https://nginx.org/packages/centos/nginx.repo
# 或者对于RHEL/AlmaLinux/Rocky Linux 8/9 使用 dnf:
# sudo dnf config-manager --add-repo https://nginx.org/packages/centos/nginx.repo
# 对于Fedora 使用 dnf:
# sudo dnf config-manager --add-repo https://nginx.org/packages/fedora/nginx.repo
选择其中一个仓库添加。
-
-
安装 Nginx:
bash
sudo yum install nginx -y
# 或者使用 dnf
sudo dnf install nginx -y
包管理器现在会从 Nginx 官方仓库下载并安装最新版本的 Nginx。 -
验证安装:
bash
sudo systemctl start nginx
sudo systemctl status nginx
sudo systemctl enable nginx
nginx -v # 查看安装的Nginx版本
总结: 使用包管理器安装 Nginx 是最推荐的方式,尤其对于初学者和不需要特定模块的用户。从发行版仓库安装最简单,从官方仓库安装可以获得最新版本。
第三部分:从源代码编译安装 Nginx
从源代码编译安装 Nginx 提供了最大的灵活性和控制权。您可以选择要包含或排除的模块,应用补丁,以及针对您的系统进行优化。这种方法更适合有经验的用户或需要高度定制环境的场景。
缺点在于:
* 过程复杂: 需要手动处理依赖、配置、编译和安装步骤。
* 维护繁琐: 更新 Nginx 需要重复编译安装过程。
* 依赖管理: 需要手动安装所有必要的构建依赖库。
* 服务集成: 需要手动创建 systemd 或 init 脚本来管理 Nginx 服务。
尽管如此,了解如何从源代码编译 Nginx 是非常有价值的。
步骤 3.1:安装构建依赖
编译 Nginx 需要一些开发工具和库文件。主要的依赖包括:
* GCC (GNU Compiler Collection): 编译 C/C++ 代码。
* Make: 构建工具。
* PCRE (Perl Compatible Regular Expressions): 用于 Nginx 中的正则表达式支持,如 location 指令。
* zlib: 用于 HTTP 头部压缩。
* OpenSSL: 用于 SSL/TLS 加密连接支持(HTTPS)。
安装这些依赖的命令因发行版而异:
-
对于基于 Debian 的系统 (如 Ubuntu):
bash
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev wget curl -ybuild-essential
: 包含 gcc, g++, make 等基本构建工具。libpcre3
,libpcre3-dev
: PCRE 库及其开发文件。zlib1g
,zlib1g-dev
: zlib 库及其开发文件。libssl-dev
: OpenSSL 开发文件。wget
,curl
: 用于下载源文件。
-
对于基于 RHEL 的系统 (如 CentOS, Fedora, AlmaLinux, Rocky Linux):
bash
sudo yum update -y
sudo yum groupinstall "Development Tools" -y
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel wget curl -y
# 或者使用 dnf
# sudo dnf update -y
# sudo dnf groupinstall "Development Tools" -y
# sudo dnf install pcre pcre-devel zlib zlib-devel openssl openssl-devel wget curl -yDevelopment Tools
: 包含 gcc, make 等工具组。pcre
,pcre-devel
: PCRE 库及其开发文件。zlib
,zlib-devel
: zlib 库及其开发文件。openssl
,openssl-devel
: OpenSSL 库及其开发文件。
步骤 3.2:下载 Nginx 源代码
访问 Nginx 官方网站 (https://nginx.org/download/) 获取最新稳定版或主线版的源代码下载链接。通常是一个 .tar.gz
格式的压缩包。
使用 wget
或 curl
下载到服务器:
“`bash
以稳定版本为例,请替换为实际的下载链接
wget https://nginx.org/download/nginx-1.24.0.tar.gz
或者下载主线版本
wget https://nginx.org/download/nginx-1.25.3.tar.gz # 请查阅官网获取最新版本
下载完成后,解压压缩包:
bash
tar -zxvf nginx-1.24.0.tar.gz
进入解压后的目录
cd nginx-1.24.0
“`
步骤 3.3:配置编译选项
在源代码目录下,运行 ./configure
脚本来配置编译选项。这是最关键的一步,您在这里指定 Nginx 的安装路径、启用/禁用模块以及其他各种设置。
./configure
脚本有很多选项。以下是一些常用的选项及其解释:
--prefix=/usr/local/nginx
: 指定 Nginx 的安装目录。默认是/usr/local/nginx
。--sbin-path=/usr/local/nginx/sbin/nginx
: 指定 Nginx 可执行文件的路径。--conf-path=/usr/local/nginx/conf/nginx.conf
: 指定主配置文件路径。--error-log-path=/usr/local/nginx/logs/error.log
: 指定错误日志路径。--http-log-path=/usr/local/nginx/logs/access.log
: 指定访问日志路径。--pid-path=/usr/local/nginx/run/nginx.pid
: 指定 PID 文件路径。--lock-path=/usr/local/nginx/run/nginx.lock
: 指定锁文件路径。--user=nginx
: 指定运行 Nginx 工作进程的用户。通常建议创建一个非特权用户。--group=nginx
: 指定运行 Nginx 工作进程的用户组。--with-pcre
: 启用 PCRE 支持。--with-zlib
: 启用 zlib 支持。--with-http_ssl_module
: 启用 SSL/TLS 模块,用于 HTTPS。--with-http_stub_status_module
: 启用状态模块,可以查看 Nginx 的基本运行状态。--with-http_realip_module
: 启用 RealIP 模块,获取客户端真实 IP(用于经过代理的情况)。--with-http_gzip_static_module
: 启用 gzip 静态文件压缩模块。--with-http_dav_module
: 启用 WebDAV 模块。--with-http_slice_module
: 启用文件分片传输模块。--with-threads
: 启用线程池。--with-file-aio
: 启用异步文件 I/O。--with-stream
: 启用 TCP/UDP 代理模块。--add-module=PATH
: 添加第三方模块。
示例配置命令:
这个示例配置包含了一些常用的模块,并将 Nginx 安装到 /usr/local/nginx
目录下:
bash
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/run/nginx.pid \
--lock-path=/usr/local/nginx/run/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_dav_module \
--with-http_slice_module \
--with-threads \
--with-file-aio \
--with-stream \
--with-pcre \
--with-zlib
在执行 ./configure
命令之前,您可能需要创建 Nginx 运行所需的用户和组(如果不存在的话):
bash
sudo groupadd nginx
sudo useradd -r -g nginx -s /sbin/nologin -M nginx
这个命令创建了一个名为 nginx
的系统用户和组,该用户不能登录系统 (/sbin/nologin
) 且不创建家目录 (-M
)。
执行 ./configure
命令。如果一切顺利,它会检查系统环境和依赖,并生成 Makefile。如果出现错误,通常是缺少依赖库,请根据错误信息安装相应的 -dev
或 -devel
包。
步骤 3.4:编译和安装
配置完成后,使用 make
命令编译 Nginx:
bash
make
这个过程可能需要一些时间,取决于您的服务器性能。
编译成功后,使用 make install
命令进行安装:
bash
sudo make install
这个命令会将 Nginx 可执行文件、配置文件、man 手册页等复制到 --prefix
指定的目录下(例如 /usr/local/nginx
)。
步骤 3.5:创建 Systemd 服务文件
为了方便管理 Nginx 服务(启动、停止、重启、重载),建议创建一个 systemd unit 文件。
创建一个名为 nginx.service
的文件在 /etc/systemd/system/
目录下:
bash
sudo nano /etc/systemd/system/nginx.service
粘贴以下内容(请根据您的安装路径 /usr/local/nginx
进行调整):
“`ini
[Unit]
Description=nginx – high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g ‘daemon on; master_process on;’
ExecStart=/usr/local/nginx/sbin/nginx -g ‘daemon on; master_process on;’
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
``
Description
*: 服务的描述。
Documentation
*: 服务的文档链接。
After=network.target
*: 指定服务在网络启动后启动。
Type=forking
*: 指定服务类型为 fork 进程。
PIDFile
*: 指定 Nginx 的 PID 文件路径,systemd 用它来跟踪主进程。
ExecStartPre
*: 在启动服务前执行的命令,这里用于测试 Nginx 配置的正确性。
-q选项使输出更简洁。
-g ‘daemon on; master_process on;’选项是 Nginx 推荐的在 systemd 环境下运行时的方式,确保主进程作为 daemon 运行且 master process 开启。
ExecStart
*: 启动 Nginx 服务的命令。
ExecReload
*: 重载 Nginx 配置的命令。
ExecStop
*: 平滑停止 Nginx 服务的命令。
PrivateTmp=true
*: 为服务提供一个私有的 /tmp 目录,增强安全性。
WantedBy=multi-user.target`: 指定服务应该在多用户模式下启动。
*
保存并关闭文件。
步骤 3.6:启用并启动 Nginx 服务
重新加载 systemd 管理器配置,以便识别新的服务文件:
bash
sudo systemctl daemon-reload
启用 Nginx 服务,使其在开机时自动启动:
bash
sudo systemctl enable nginx
启动 Nginx 服务:
bash
sudo systemctl start nginx
检查服务状态:
bash
sudo systemctl status nginx
您应该看到服务处于 “active (running)” 状态。
至此,您已经成功从源代码编译并安装了 Nginx。
第四部分:验证 Nginx 安装
无论是通过包管理器还是源代码安装,验证安装是否成功并能正常访问是下一步。
-
检查 Nginx 进程:
使用ps
命令查看 Nginx 进程是否在运行:
bash
ps aux | grep nginx
您应该看到至少一个 Nginx 主进程 (master process
) 和一个或多个工作进程 (worker process
) 在运行。 -
检查 Nginx 版本:
运行 Nginx 可执行文件并带上-V
参数可以查看详细的版本信息和编译时使用的配置选项(这对于源代码安装尤其有用)。- 包管理器安装:
bash
nginx -V
如果找不到nginx
命令,可能需要添加 Nginx 可执行文件的路径到系统的 PATH 环境变量中,或者使用其绝对路径(如/usr/sbin/nginx
)。 - 源代码安装:
bash
/usr/local/nginx/sbin/nginx -V
请根据您的--sbin-path
调整命令。
输出会包含版本号、构建信息以及所有启用的模块列表。
- 包管理器安装:
-
通过浏览器访问:
默认情况下,Nginx 会监听 80 端口(HTTP)。打开您的 Web 浏览器,输入您的服务器的 IP 地址或域名。如果您看到一个显示 “Welcome to nginx!” 字样的默认页面,说明 Nginx 已经成功安装并正在运行。
如果您无法从外部访问服务器 IP:
这通常是由于防火墙阻止了 80 端口的访问。请参考下一节配置防火墙。
第五部分:配置防火墙
为了让外部用户能够访问您的 Nginx Web 服务器,您需要在服务器的防火墙中开放 HTTP (80) 和 HTTPS (443) 端口。
以下是针对常见的防火墙工具 ufw
(Ubuntu/Debian) 和 firewalld
(RHEL/CentOS/Fedora/AlmaLinux/Rocky Linux) 的配置方法。
使用 ufw (Uncomplicated Firewall)
ufw 在 Ubuntu 和 Debian 系统中非常常用。
-
检查 ufw 状态:
bash
sudo ufw status
如果防火墙处于非活动状态 (inactive
),您可能需要启用它:sudo ufw enable
(启用前请确保您已经开放了 SSH 端口 22,以免自己被锁在外面:sudo ufw allow ssh
)。 -
允许 Nginx 流量:
ufw 通常自带 Nginx 的应用配置文件,可以方便地按服务名称开放端口。- 允许 HTTP (80) 和 HTTPS (443):
bash
sudo ufw allow 'Nginx Full' - 只允许 HTTP (80):
bash
sudo ufw allow 'Nginx HTTP' - 只允许 HTTPS (443):
bash
sudo ufw allow 'Nginx HTTPS'
选择适合您需求的规则执行。
- 允许 HTTP (80) 和 HTTPS (443):
-
重载 ufw 规则:
bash
sudo ufw reload -
再次检查 ufw 状态:
bash
sudo ufw status
您应该看到 Nginx 相关的端口规则已经被允许。
使用 firewalld
firewalld 在 RHEL 及其衍生版中是默认的防火墙管理工具。
-
检查 firewalld 状态:
bash
sudo systemctl status firewalld
如果防火墙处于非活动状态 (inactive
),您可能需要启用它:sudo systemctl start firewalld
并设置开机自启:sudo systemctl enable firewalld
。 -
允许 HTTP 和 HTTPS 服务:
firewalld 允许您按服务名称(如http
和https
)开放端口。- 允许 HTTP (80):
bash
sudo firewall-cmd --permanent --add-service=http - 允许 HTTPS (443):
bash
sudo firewall-cmd --permanent --add-service=https
--permanent
标志表示规则在防火墙重启后仍然有效。
- 允许 HTTP (80):
-
重载 firewalld 规则:
bash
sudo firewall-cmd --reload
重载操作会使--permanent
添加的规则生效。 -
检查 firewalld 规则:
bash
sudo firewall-cmd --list-all
在输出的服务列表中,您应该能看到http
和/或https
。
配置完防火墙后,再次尝试从浏览器访问服务器 IP 地址,现在应该可以看到 “Welcome to nginx!” 页面了。
第六部分:Nginx 配置文件结构简介
成功安装并启动 Nginx 后,了解其配置文件结构对于后续的配置和管理至关重要。
通过包管理器安装的 Nginx 配置文件通常位于 /etc/nginx/
目录下。从源代码安装的默认在 --conf-path
指定的路径(如 /usr/local/nginx/conf/
)。
主要的配置文件包括:
-
nginx.conf
: 这是 Nginx 的主配置文件。它包含了全局设置、HTTP 服务器块的定义、邮件代理或流代理的定义等。它通常会通过include
指令包含其他配置文件,以保持主文件的整洁。 -
conf.d/
目录: 这个目录通常包含额外的.conf
文件,这些文件通过nginx.conf
中的include /etc/nginx/conf.d/*.conf;
(或类似路径) 指令加载。这是一个存放独立配置片段的好地方,例如为不同的网站或服务创建单独的配置块。 -
sites-available/
和sites-enabled/
目录 (主要在 Debian/Ubuntu 系统中):sites-available/
: 存放所有可用的网站或应用配置文件的目录。您可以在这里创建和编辑您的站点配置文件,但它们不会被 Nginx 加载,除非被链接到sites-enabled/
目录。sites-enabled/
: 存放当前启用的网站配置文件的目录。nginx.conf
通常通过include /etc/nginx/sites-enabled/*;
指令加载这个目录下的所有配置文件。要启用一个站点,只需在sites-available/
中创建配置文件,然后使用软链接(symlink)将其链接到sites-enabled/
目录。例如:
bash
# 创建一个链接启用站点 example.conf
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
# 移除链接禁用站点
# sudo rm /etc/nginx/sites-enabled/example.conf
这种结构使得启用和禁用网站变得非常方便,只需创建或删除软链接并重载 Nginx 配置即可。
Nginx 配置语法:
Nginx 配置文件使用特定的语法:
* 配置指令以分号 ;
结尾。
* 指令可以分组到称为“块”的上下文中使用大括号 {}
包围。常见的块包括 events
, http
, server
, location
, mail
, stream
等。
* server
块定义了一个虚拟主机,通常通过监听的端口和服务器名称 (server_name) 来区分不同的站点。
* location
块定义了如何处理特定 URL 或路径的请求。
* 井号 #
开头的行是注释。
测试配置和重载:
在修改 Nginx 配置文件后,务必先测试配置文件的语法是否正确,以避免重启服务时出错:
bash
sudo nginx -t
如果使用 systemd,也可以通过 ExecStartPre
中定义的命令来测试:
bash
sudo systemctl status nginx
或者直接运行测试命令(根据您的安装路径调整):
bash
/usr/local/nginx/sbin/nginx -t
如果测试通过,您会看到类似 “syntax is ok”, “test is successful” 的输出。
然后,重载 Nginx 配置以使更改生效,而无需停止服务(这不会中断正在处理的请求):
“`bash
sudo systemctl reload nginx
或者直接使用nginx命令(根据您的安装路径调整)
sudo /usr/local/nginx/sbin/nginx -s reload
“`
如果配置测试失败,Nginx 将不会重载配置,并会报告错误信息。
第七部分:常见问题及故障排除
在安装和配置 Nginx 过程中,可能会遇到一些问题。以下是一些常见问题及其解决方法:
-
Nginx 服务无法启动:
- 检查配置文件: 这是最常见的原因。使用
sudo nginx -t
(或您的安装路径下的nginx -t
) 检查配置文件是否有语法错误或路径问题。根据错误信息修改配置文件。 - 检查日志文件: Nginx 错误日志通常位于
/var/log/nginx/error.log
(包管理器安装) 或您的--error-log-path
指定的路径。查看日志文件可以获取更详细的错误原因。 - 端口冲突: 确保 Nginx 监听的端口(默认 80 和 443)没有被其他程序占用。可以使用
sudo netstat -tulnp | grep 80
或sudo ss -tulnp | grep 80
检查。如果端口被占用,停止占用端口的程序或修改 Nginx 监听的端口。 - 权限问题: 检查 Nginx 运行用户对日志目录、配置文件目录和网站根目录是否有读写权限。
- 检查配置文件: 这是最常见的原因。使用
-
无法通过浏览器访问 Nginx 页面:
- 检查 Nginx 服务是否运行: 使用
sudo systemctl status nginx
确认服务处于active (running)
状态。 - 检查防火墙: 确保您已经开放了 80 (HTTP) 和 433 (HTTPS) 端口。参考本文的防火墙配置章节。
- 检查服务器 IP 地址或域名: 确保您在浏览器中输入的是正确的服务器 IP 地址或域名。如果您使用了域名,请确认 DNS 解析是否正确指向您的服务器 IP。
- 网络问题: 检查服务器的网络连接是否正常,以及您的客户端是否能够访问服务器所在的网络。
- 检查 Nginx 服务是否运行: 使用
-
修改配置后不生效:
- 测试配置: 确保在修改配置后使用
sudo nginx -t
进行了测试,并且测试通过。 - 重载配置: 确保您执行了正确的重载命令
sudo systemctl reload nginx
或sudo nginx -s reload
,而不是重启 (restart
)。重载是使配置生效而不断开现有连接的方式。
- 测试配置: 确保在修改配置后使用
-
源代码编译时缺少依赖:
./configure
步骤失败并报告缺少某个库:根据错误信息,确定缺少的库的名称(通常会提示类似... library not found
或... requires some library
)。然后使用您的包管理器搜索并安装相应的开发包(通常以-dev
或-devel
结尾)。例如,如果缺少 PCRE,安装libpcre3-dev
或pcre-devel
。安装依赖后,重新运行./configure
。
-
默认欢迎页不显示,出现 403 Forbidden 错误:
- 这通常是文件权限问题。检查 Nginx 工作进程用户(通常是
nginx
用户)对网站根目录及其内部文件的读取权限。确保目录有执行权限,文件有读取权限。例如,使用ls -l /usr/share/nginx/html/index.html
查看文件权限。
- 这通常是文件权限问题。检查 Nginx 工作进程用户(通常是
第八部分:后续学习方向
成功安装 Nginx 只是开始。为了充分利用 Nginx 的强大功能,您可以进一步学习:
- 配置虚拟主机 (Server Blocks): 学习如何在一个 Nginx 实例上托管多个网站。
- 配置 SSL/TLS (HTTPS): 为您的网站启用加密连接,保障数据安全。可以使用 Let’s Encrypt 免费获取 SSL 证书。
- 配置反向代理和负载均衡: 将 Nginx 作为前端代理,将请求转发给后端的应用服务器(如 Apache, Node.js, Python 应用等),并实现负载均衡以提高性能和可用性。
- 配置缓存: 使用 Nginx 的缓存功能加速静态资源或动态内容的访问。
- 静态文件服务优化: 配置浏览器缓存、gzip 压缩等。
- 安全性加固: 限制访问、防止 DDoS 攻击、配置安全头部等。
- 了解 Nginx 模块: 学习 Nginx 内置模块和第三方模块的使用,扩展 Nginx 的功能。
- 监控 Nginx 性能: 使用 stub_status 模块或其他监控工具。
结论
本文详细介绍了在 Linux 环境下安装 Nginx 的两种主要方法:通过包管理器安装和从源代码编译安装。我们涵盖了安装前的准备工作、不同发行版下的具体安装步骤、安装后的验证、防火墙配置、Nginx 配置文件结构简介以及常见的故障排除。
通过包管理器安装是大多数用户的推荐选择,它简单易行且易于维护。从源代码编译则提供了更高的灵活性,适合需要高度定制或最新功能的用户。
无论您选择哪种安装方式,Nginx 都是一个强大而灵活的工具,为您的 Web 服务提供高性能和稳定性。希望本指南能帮助您顺利地在 Linux 系统上安装并开始使用 Nginx。祝您使用愉快!