Ubuntu 系统上 Nginx 的详细安装指南
前言
在 Web 服务器领域,Nginx (发音为 “engine-x”) 以其高性能、稳定性、丰富的功能集和低资源消耗而闻名。它被广泛应用于全球许多高流量的网站,无论是作为独立的 Web 服务器、反向代理、负载均衡器还是 HTTP 缓存。Ubuntu 作为一款流行且功能强大的 Linux 发行版,尤其受到开发者和系统管理员的青睐,是部署 Nginx 的理想平台。
本文将为您提供一个详细的步骤指南,涵盖在 Ubuntu 系统上安装和基本配置 Nginx 的过程。我们将探讨通过 Ubuntu 官方仓库和 Nginx 官方仓库两种不同的安装方法,并介绍安装后的基本管理、防火墙设置以及如何配置第一个网站。无论您是初学者还是有一定经验的用户,本指南都能帮助您顺利地在 Ubuntu 环境中搭建起 Nginx 服务。
为何选择 Nginx?
在深入安装步骤之前,简单了解 Nginx 的优势有助于理解为何它如此受欢迎:
- 高性能与高并发处理能力: Nginx 采用了事件驱动、异步非阻塞的架构,相比传统的进程/线程模型(如 Apache 的默认模式),能够更高效地处理大量并发连接,特别适合高流量网站。
- 轻量级与低资源消耗: Nginx 的内存和 CPU 占用率通常比 Apache 低,这使得它在资源有限的环境中表现出色。
- 多功能性: 除了作为静态文件服务器,Nginx 还是一个优秀的反向代理服务器(将客户端请求转发到后端应用服务器,如 Node.js, Python, PHP-FPM 等)、负载均衡器(将流量分散到多个后端服务器以提高可用性和性能)和 HTTP 缓存。
- 稳定性: Nginx 以其稳定性著称,能够长时间运行而无需频繁重启。
- 易于扩展: Nginx 拥有模块化的设计,可以通过第三方模块进行功能扩展。
- 配置简洁优雅: Nginx 的配置文件语法相对直观,易于理解和管理。
为何选择 Ubuntu?
将 Nginx 部署在 Ubuntu 上有诸多优势:
- 流行与广泛支持: Ubuntu 是最流行的 Linux 发行版之一,拥有庞大的用户群体和活跃的社区,遇到问题时容易找到解决方案和帮助。
- 易用性: Ubuntu 的包管理工具 APT (
apt
) 使得软件的安装、升级和卸载变得异常简单和方便。 - 稳定性: Ubuntu 的 LTS (长期支持) 版本提供五年的安全更新和维护,非常适合生产环境。
- 安全性: Ubuntu 默认配置了一些安全措施,且安全更新及时。
- 良好的文档: Ubuntu 和 Nginx 都有详尽的官方文档和大量的在线资源。
有了这些基础认识,我们就可以开始 Nginx 的安装之旅了。
环境准备
在开始安装之前,请确保您满足以下条件:
- 一个运行中的 Ubuntu 系统实例: 这可以是物理机、虚拟机、云服务器 (如 AWS EC2, DigitalOcean Droplet, Azure VM 等)。本文以 Ubuntu Server LTS 版本为例,但步骤对于桌面版或其他近期版本也基本适用。
- 具有
sudo
权限的用户: 安装和管理系统服务需要管理员权限。 - 稳定的互联网连接: 需要从软件仓库下载 Nginx 及其依赖。
- 基本的终端操作知识: 熟悉使用命令行界面。
登录到您的 Ubuntu 服务器或打开终端。在执行任何安装操作之前,建议先更新系统的包列表,以确保您能获取到最新版本的软件包及其依赖信息。
bash
sudo apt update
如果系统提示有可升级的软件包,您也可以选择执行升级操作,但这并非强制要求,除非有特定的安全或兼容性需求。
bash
sudo apt upgrade
根据您的系统配置和已安装的软件,升级过程可能需要一些时间。在执行升级时,您可能需要确认一些提示。
安装 Nginx:方法一 – 使用 Ubuntu 官方仓库 (推荐初学者)
这是在 Ubuntu 上安装 Nginx 最简单和最常用的方法。Ubuntu 的官方软件仓库中包含了 Nginx 的预编译版本,可以通过 apt
包管理器直接安装。这种方法安装的版本通常不是最新版,但经过了 Ubuntu 团队的测试,稳定性和兼容性较好,适合大多数应用场景。
-
安装 Nginx 包:
在终端中运行以下命令来安装 Nginx:bash
sudo apt install nginx系统会提示您确认安装,显示将要下载和安装的软件包以及它们占用的磁盘空间。输入
y
并按回车键继续。apt
会自动处理所有的依赖关系,下载所需的软件包并完成安装过程。 -
验证安装:
安装完成后,Nginx 服务应该会自动启动。您可以使用systemctl
命令来检查 Nginx 服务的状态:bash
systemctl status nginx输出应该显示
active (running)
,表明 Nginx 服务正在运行。如果显示inactive (dead)
或其他状态,您可以使用sudo systemctl start nginx
命令来启动它。您还可以检查 Nginx 的版本号,以确认安装成功:
bash
nginx -v或者获取更详细的版本信息和编译参数:
bash
nginx -V -
访问默认欢迎页面:
安装成功并确认 Nginx 服务正在运行后,您可以通过 Web 浏览器访问服务器的 IP 地址来查看 Nginx 的默认欢迎页面。首先,您需要知道您的 Ubuntu 服务器的公网 IP 地址。如果您是在云服务器上操作,可以在云服务商的控制台找到。如果您在本地网络中,可以使用
ip a
或ifconfig
命令查看。例如,使用ip a
命令查找eth0
或ens*
接口的 IP 地址:bash
ip a show eth0 # 或者您的网卡接口名找到
inet
后面的 IP 地址。在您的本地计算机上打开 Web 浏览器,并在地址栏输入服务器的 IP 地址,然后按回车键。
例如:
http://您的服务器IP地址
如果一切正常,您应该会看到 Nginx 的默认欢迎页面,通常显示 “Welcome to nginx!”。
如果无法访问,请检查以下可能性:
* Nginx 服务是否正在运行 (systemctl status nginx
)。
* 服务器的防火墙是否允许 HTTP (端口 80) 或 HTTPS (端口 443) 流量通过。我们将在后续章节详细介绍防火墙设置。
* 如果您是在云服务器上,检查云服务商的安全组或防火墙规则是否允许相应的端口访问。
至此,您已经成功地通过 Ubuntu 官方仓库安装了 Nginx 并验证了其运行。这是最快捷的方式。
安装 Nginx:方法二 – 使用 Nginx 官方仓库 (获取最新版或特定模块)
如果您需要安装最新版本的 Nginx,或者需要使用 Ubuntu 官方仓库中可能没有提供的特定模块,那么从 Nginx 官方仓库安装是更好的选择。Nginx 官方仓库提供了最新版本的 Stable (稳定版) 和 Mainline (主线版) Nginx。
从官方仓库安装的过程比从 Ubuntu 仓库安装稍微复杂一些,需要先添加 Nginx 的仓库源和 GPG 密钥。
-
安装必要的工具:
您可能需要安装一些工具来添加仓库和处理 HTTPS 源。bash
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyringcurl
: 用于下载 GPG 密钥。gnupg2
: 用于管理 GPG 密钥。ca-certificates
: 包含验证 SSL/TLS 连接所需证书。lsb-release
: 提供lsb_release -cs
命令用于获取 Ubuntu 版本代号。ubuntu-keyring
: 包含 Ubuntu 的 GPG 公钥。
-
导入 Nginx 官方 GPG 密钥:
为了验证从 Nginx 仓库下载的软件包的真实性,需要导入 Nginx 的官方签名密钥。自 Ubuntu 20.04 (Focal Fossa) 起,推荐使用更安全的signed-by
方法来添加 GPG 密钥。首先,下载密钥并将其保存到
/etc/apt/keyrings/
目录中:bash
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /etc/apt/keyrings/nginx.gpg >/dev/nullcurl ... | gpg --dearmor
: 下载密钥并将其转换为适合apt
的格式。sudo tee /etc/apt/keyrings/nginx.gpg
: 使用tee
命令将转换后的密钥内容通过sudo
写入到/etc/apt/keyrings/nginx.gpg
文件。>/dev/null
避免将密钥内容打印到屏幕。
确认密钥文件已创建且权限正确:
“`bash
ls -l /etc/apt/keyrings/nginx.gpg期望输出类似: -rw-r–r– 1 root root XXXX 月 日 HH:MM /etc/apt/keyrings/nginx.gpg
“`
-
添加 Nginx 仓库源:
接下来,需要创建一个新的 APT 源列表文件,指向 Nginx 官方仓库。您需要知道您的 Ubuntu 版本代号。可以使用lsb_release -cs
命令获取。bash
UBUNTU_CODENAME=$(lsb_release -cs)
echo "Ubuntu 版本代号: $UBUNTU_CODENAME"然后,为 Stable (稳定版) 或 Mainline (主线版) Nginx 添加仓库源。通常建议使用 Stable 版本用于生产环境。
-
添加 Stable 版本仓库:
bash
echo "deb [signed-by=/etc/apt/keyrings/nginx.gpg] http://nginx.org/packages/ubuntu $UBUNTU_CODENAME nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo "deb-src [signed-by=/etc/apt/keyrings/nginx.gpg] http://nginx.org/packages/ubuntu $UBUNTU_CODENAME nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.listdeb ...
: 添加二进制包的源。deb-src ...
: 添加源码包的源(可选,如果您不需要编译 Nginx)。[signed-by=/etc/apt/keyrings/nginx.gpg]
: 指定使用哪个 GPG 密钥文件来验证此仓库的签名。http://nginx.org/packages/ubuntu
: Nginx 仓库的 URL。$UBUNTU_CODENAME
: 使用之前获取的 Ubuntu 版本代号,例如focal
或jammy
。nginx
: 指明仓库中是 Nginx 相关的软件包。sudo tee /etc/apt/sources.list.d/nginx.list
: 创建并写入/etc/apt/sources.list.d/nginx.list
文件。sudo tee -a ...
: 追加源码包的源到同一文件。
-
添加 Mainline 版本仓库 (如果需要):
Mainline 版本包含最新的功能和 Bug 修复,但可能不如 Stable 版本经过广泛测试。如果您需要最新特性,可以考虑,但在生产环境需谨慎。bash
echo "deb [signed-by=/etc/apt/keyrings/nginx.gpg] http://nginx.org/packages/mainline/ubuntu $UBANTU_CODENAME nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo "deb-src [signed-by=/etc/apt/keyrings/nginx.gpg] http://nginx.org/packages/mainline/ubuntu $UBANTU_CODENAME nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list
请注意,Stable 和 Mainline 仓库不能同时启用。如果您添加了 Mainline 仓库,需要删除或注释掉 Stable 仓库的源列表。
-
-
更新 APT 包列表:
添加新的仓库源后,必须更新 APT 的包列表,以便它知道可以从新的仓库获取 Nginx 包。bash
sudo apt update在执行此命令时,您应该会看到从
nginx.org
仓库获取信息的输出。 -
安装 Nginx 包:
现在,可以从 Nginx 官方仓库安装 Nginx 了。包的名称仍然是nginx
。bash
sudo apt install nginx如果您之前已经从 Ubuntu 官方仓库安装过 Nginx,
apt
会提示升级到官方仓库的版本。如果您是首次安装,它会直接安装。输入
y
并按回车键确认安装。 -
验证安装:
安装完成后,同样使用systemctl
和nginx -v
(或nginx -V
) 命令来验证安装。您会发现版本号比从 Ubuntu 官方仓库安装的要新。bash
systemctl status nginx
nginx -V同样,您可以通过访问服务器的 IP 地址来查看 Nginx 的欢迎页面。
通过这种方法,您获得了 Nginx 的最新版本,并可以利用官方仓库提供的特定编译选项或模块。
关于 Nginx 官方仓库的包类型:
Nginx 官方仓库提供了几个不同的包,主要区别在于包含的模块:
nginx
: 这是核心包,通常包含常用的标准模块。在官方仓库中,这个包通常会依赖于更具体的nginx-core
或nginx-full
。nginx-full
: 包含所有标准模块和大部分官方的非标准模块。nginx-core
: 包含标准模块。nginx-light
: 包含精简的标准模块,资源占用更少。nginx-extras
: 包含nginx-full
的所有模块,外加一些额外的第三方模块(这个包不一定在官方仓库中提供,可能需要在第三方源或自行编译)。
当您使用 sudo apt install nginx
命令时,apt
会根据依赖关系自动选择安装 nginx
包以及它所依赖的 nginx-core
或 nginx-full
等。通常安装 nginx
包即可满足大多数需求。
Nginx 服务的管理 (使用 systemd)
在现代 Ubuntu 系统中,服务通常由 systemd
管理。安装 Nginx 后,您可以使用 systemctl
命令方便地管理 Nginx 服务。
以下是一些常用的 systemctl
命令:
-
启动 Nginx 服务:
bash
sudo systemctl start nginx -
停止 Nginx 服务:
bash
sudo systemctl stop nginx -
重启 Nginx 服务:
重启会完全停止 Nginx 进程,然后再启动。这会导致短暂的服务中断。
bash
sudo systemctl restart nginx -
重新加载 Nginx 配置:
重新加载会使 Nginx 主进程重新读取配置文件,并在不中断现有连接的情况下启动新的 worker 进程来使用新配置。这是更改配置后推荐的方式。
bash
sudo systemctl reload nginx
重要: 在执行reload
或restart
之前,强烈建议先检查配置文件的语法是否正确,避免因配置错误导致服务启动失败或中断。 -
检查 Nginx 服务状态:
bash
systemctl status nginx
这个命令会显示服务是否正在运行、进程 ID、最近的日志行等信息。 -
在系统启动时启用 Nginx 服务:
默认情况下,安装后 Nginx 通常会被配置为开机自启动。如果您需要手动启用,可以使用:
bash
sudo systemctl enable nginx -
在系统启动时禁用 Nginx 服务:
如果您不希望 Nginx 在系统启动时自动运行:
bash
sudo systemctl disable nginx -
查看 Nginx 服务的日志:
使用journalctl
可以查看systemd
管理的服务日志。
bash
sudo journalctl -u nginx
要查看最近的日志,可以添加-f
参数进行实时跟踪或-n
参数指定行数。
熟练掌握这些 systemctl
命令对于日常管理 Nginx 服务至关重要。
配置防火墙 (UFW)
在服务器上运行任何网络服务,配置防火墙以限制仅允许必要的流量访问是最佳实践。Ubuntu 系统通常预装了 UFW (Uncomplicated Firewall),一个简化防火墙规则管理的工具。
在允许外部访问 Nginx 之前,您需要配置 UFW 允许 HTTP (端口 80) 和/或 HTTPS (端口 443) 流量。Nginx 在安装时通常会向 UFW 注册一些应用程序配置文件。
-
检查 UFW 应用程序配置文件:
您可以查看 Nginx 注册的 UFW 配置文件:bash
sudo ufw app list输出应该类似这样:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH这些配置文件分别代表:
*Nginx HTTP
: 只打开端口 80 (HTTP)。
*Nginx HTTPS
: 只打开端口 443 (HTTPS)。
*Nginx Full
: 打开端口 80 和端口 443 (HTTP 和 HTTPS)。 -
允许 Nginx 流量:
根据您的需求选择相应的配置文件进行允许。如果您计划同时提供 HTTP 和 HTTPS 服务,推荐使用Nginx Full
。bash
sudo ufw allow 'Nginx Full'或者,如果您只想先允许 HTTP:
bash
sudo ufw allow 'Nginx HTTP' -
检查 UFW 状态 (重要):
在启用 UFW 之前,请确保您已经允许了 SSH (端口 22),以免将自己锁定在服务器之外!通常,如果您是通过 SSH 连接到服务器,SSH 规则应该已经允许。您可以使用sudo ufw status
查看当前规则。bash
sudo ufw status输出会显示防火墙状态和已允许的规则。确保
OpenSSH
或端口 22 已被允许。如果未允许,请执行sudo ufw allow 'OpenSSH'
。 -
启用 UFW (如果未启用):
如果 UFW 尚未启用,现在可以启用它。启用后,所有未明确允许的连接都将被拒绝。bash
sudo ufw enable系统会提示您启用 UFW 可能会中断现有的 SSH 连接,输入
y
并按回车确认。 -
再次检查 UFW 状态:
启用 UFW 后,再次检查状态,确认 Nginx (以及 SSH) 规则已生效。bash
sudo ufw status输出应该显示
Status: active
,并且列出允许的规则,例如允许来自任何地方的端口 80/443 (Nginx Full) 和端口 22 (SSH) 的连接。
现在,您的服务器防火墙已经被配置为允许外部访问 Nginx 服务了。
理解 Nginx 的配置文件结构
Nginx 的核心在于其配置文件。理解配置文件的结构对于后续的自定义设置非常重要。
Nginx 的主配置文件是 /etc/nginx/nginx.conf
。这个文件包含了全局设置和指向其他配置文件的 include
指令。
主要的配置目录和文件包括:
/etc/nginx/
: Nginx 的主要配置目录。/etc/nginx/nginx.conf
: 主配置文件。/etc/nginx/conf.d/
: 一个目录,通常用于存放独立的.conf
文件,通过nginx.conf
中的include /etc/nginx/conf.d/*.conf;
指令加载。这有助于模块化配置。/etc/nginx/sites-available/
: 用于存放所有可用的虚拟主机 (或称为 Server Blocks) 的配置文件。/etc/nginx/sites-enabled/
: 用于存放当前启用的虚拟主机的配置文件。Nginx 实际加载的是这个目录下的配置。通常,这里的配置是/etc/nginx/sites-available/
中文件的软链接 (symbolic link)。这种结构使得启用或禁用虚拟主机非常方便,只需创建或删除软链接即可。/etc/nginx/snippets/
: 一个目录,用于存放可重用的配置代码片段,可以通过include
指令在其他配置文件中引用,例如 SSL 配置片段。/var/log/nginx/
: Nginx 的日志文件存放目录,包括访问日志 (access.log
) 和错误日志 (error.log
)。/var/www/html/
: 这是 Nginx 默认的 Web 根目录,存放着默认的欢迎页面文件。
nginx.conf
主配置文件结构示例:
“`nginx
全局块 – 设置影响 Nginx 整体的参数
user www-data; # Nginx worker 进程运行的用户和组
worker_processes auto; # worker 进程数,auto 通常根据 CPU 核数自动设置
pid /run/nginx.pid; # PID 文件路径
error_log /var/log/nginx/error.log; # 错误日志路径和级别
events {
# 事件块 – 配置 Nginx worker 进程如何处理连接
worker_connections 768; # 每个 worker 进程最大并发连接数
# multi_accept on; # 接收尽可能多的连接
}
http {
# HTTP 块 – 配置 HTTP 服务器的行为
# 包括文件类型、日志格式、TCP 配置、Gzip 压缩等
sendfile on; # 启用高效的文件传输模式
tcp_nopush on; # 在 sendfile 开启时,防止发送不完整的 TCP 数据包
tcp_nodelay on; # 保持长连接时,数据包发送时不延迟
keepalive_timeout 65; # keep-alive 连接的超时时间
types_hash_max_size 2048; # 文件类型 hash 表的最大大小
include /etc/nginx/mime.types; # 包含 MIME 类型映射
default_type application/octet-stream; # 默认文件类型
# SSL 设置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # 允许的 SSL/TLS 协议版本
ssl_prefer_server_ciphers on; # 优先使用服务器端的密码套件
# 日志格式
access_log /var/log/nginx/access.log; # 访问日志路径和格式 (默认 combined)
# Gzip 压缩
gzip on;
# gzip_disable "msie6"; # IE6 不使用 gzip
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 包含 conf.d 目录下的额外配置
include /etc/nginx/conf.d/*.conf;
# 包含 sites-enabled 目录下的虚拟主机配置 (Server Blocks)
include /etc/nginx/sites-enabled/*;
}
可以有其他块,如 stream (用于 TCP/UDP 代理)
stream {
…
}
“`
理解这个结构,特别是 http
块内的设置以及 include sites-enabled/*;
如何加载虚拟主机配置,是配置 Nginx 的关键。
配置您的第一个网站 (Server Block)
当您安装完 Nginx 并能看到默认欢迎页面时,这只是 Nginx 作为静态 Web 服务器的最低要求。通常,您会希望使用 Nginx 来托管您自己的网站。这通过配置 “Server Blocks” (在 Apache 中称为 Virtual Hosts) 来实现。
Server Block 允许 Nginx 根据请求的主机名 (域名) 和端口来决定由哪个 Server Block 处理请求,从而在同一台服务器上托管多个网站。
我们将创建一个新的 Server Block 来托管一个示例网站。
-
创建网站根目录:
首先,为您的网站创建一个新的根目录,用于存放网站文件 (HTML, CSS, JS, 图片等)。通常,这些目录会放在/var/www/
下。为了便于管理,可以按照域名来组织目录结构。假设您的网站域名是
example.com
(请替换为您的实际域名),您可以创建如下目录:bash
sudo mkdir -p /var/www/example.com/html
-p
参数会创建所有父目录,如果它们不存在。 -
设置目录权限:
为了让您的普通用户能够在网站根目录中创建和编辑文件,同时确保 Nginx 进程 (www-data
用户) 能够读取文件,您需要设置正确的权限。通常的做法是将目录的所有权赋予您的用户,并将组所有权赋予
www-data
组,然后设置合适的权限。bash
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:www-data /var/www/example.com # 将整个网站目录的组所有权给 www-data
sudo chmod -R 755 /var/www/example.com # 确保目录和文件对所有者和组有读写执行权限,其他人只有读和执行权限
*$USER
是一个环境变量,代表当前登录的用户名。
*chown -R
: 递归地更改目录及其内容的所属用户和组。
*chmod -R 755
: 递归地更改目录及其内容的权限。755
权限表示:
* 所有者 (user): 读、写、执行 (7)
* 组 (group): 读、执行 (5)
* 其他人 (others): 读、执行 (5) -
创建示例 HTML 文件:
在网站根目录中创建一个简单的index.html
文件作为测试页面。bash
nano /var/www/example.com/html/index.html将以下 HTML 内容粘贴到文件中:
html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Example.com</title>
<style>
body {
font-family: sans-serif;
margin: 20px;
text-align: center;
}
h1 {
color: #333;
}
</style>
</head>
<body>
<h1>Success! Nginx is serving Example.com</h1>
<p>This is the default welcome page for your domain configuration.</p>
</body>
</html>
保存并关闭文件 (在 nano 中按Ctrl + X
,Y
, 回车)。 -
创建 Server Block 配置文件:
现在,为example.com
创建一个 Server Block 配置文件。我们将它放在/etc/nginx/sites-available/
目录中。bash
sudo nano /etc/nginx/sites-available/example.com.conf将以下 Server Block 配置粘贴到文件中,并根据您的域名进行修改:
“`nginx
server {
listen 80; # 监听 IPv4 的 80 端口
listen [::]:80; # 监听 IPv6 的 80 端口server_name example.com www.example.com; # 定义服务器名称,即域名 root /var/www/example.com/html; # 定义网站的根目录 index index.html index.htm index.nginx-debian.html; # 定义默认索引文件 location / { # 尝试按顺序查找 URI 对应的文件或目录 # 如果 $uri 存在,则直接访问文件 # 如果 $uri/ 存在,则访问目录 (并尝试加载 index 文件) # 如果两者都不存在,则返回 404 错误 try_files $uri $uri/ =404; } # 错误页面配置 (可选) # error_page 404 /404.html; # location = /404.html { # internal; # internal 指令确保该位置只能被内部重定向访问 # } # 可以添加其他 location 块来处理特定的 URL 模式或文件类型 # location ~ /\.ht { # deny all; # 阻止访问 .htaccess 文件 # } # 访问日志和错误日志 (可选,如果未在 http 块中全局配置) # access_log /var/log/nginx/example.com_access.log; # error_log /var/log/nginx/example.com_error.log;
}
“`解释关键指令:
*listen
: 指定 Nginx 监听的 IP 地址和端口。80
是 HTTP 的标准端口。[::]:80
是 IPv6 地址的写法。
*server_name
: 定义这个 Server Block 负责处理的域名。当 Nginx 接收到一个请求时,它会根据请求头中的Host
字段与各个 Server Block 的server_name
进行匹配,找到最合适的 Server Block。
*root
: 指定网站文件的存放路径。Nginx 会在这个目录下查找请求的文件。
*index
: 定义当请求指向一个目录时,Nginx 应该尝试查找的默认文件列表。Nginx 会按顺序查找这些文件,找到第一个存在的就返回。
*location /
: 这是一个位置块,用于匹配请求的 URI。/
匹配所有请求。
*try_files
: 在location
块中使用,指示 Nginx 尝试按照给定的顺序查找文件或目录。保存并关闭文件。
-
启用 Server Block (创建软链接):
Nginx 只会加载sites-enabled/
目录下的配置文件。因此,我们需要在sites-enabled/
目录中为刚刚创建的配置文件创建一个软链接。bash
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
ln -s source_file link_name
命令创建一个指向source_file
的软链接link_name
。 -
禁用默认的 Server Block:
为了避免冲突,最好禁用 Nginx 默认安装时创建的 Server Block,因为它也监听端口 80 并且没有任何server_name
(这可能导致它捕获所有未匹配到的请求,或者与您的新配置冲突)。默认的 Server Block 配置文件位于
/etc/nginx/sites-available/default
,其软链接在/etc/nginx/sites-enabled/default
。禁用它只需删除软链接:“`bash
sudo unlink /etc/nginx/sites-enabled/default或者使用 rm 命令,但 unlink 更推荐用于删除软链接
sudo rm /etc/nginx/sites-enabled/default
“`
-
测试 Nginx 配置:
在重新加载或重启 Nginx 之前,务必测试您的配置文件的语法是否正确。这是一个非常重要的步骤,可以避免因配置错误导致服务中断。bash
sudo nginx -t如果配置正确,输出会显示类似:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful如果有语法错误,Nginx 会指出错误所在的行数和原因,您需要回到配置文件中修改错误。
-
重新加载 Nginx 配置:
配置测试成功后,重新加载 Nginx 服务以应用新的 Server Block 配置。bash
sudo systemctl reload nginx如果测试失败,您需要修复错误后再尝试重新加载或重启。
-
测试网站访问:
现在,您应该可以通过浏览器访问您的域名example.com
(或www.example.com
) 来查看您刚刚创建的示例网站了。重要: 如果您还没有为
example.com
配置 DNS 记录指向您的服务器 IP 地址,您可能需要修改您本地计算机的 hosts 文件来进行测试。
* 在 Linux/macOS 上,编辑/etc/hosts
文件。
* 在 Windows 上,编辑C:\Windows\System32\drivers\etc\hosts
文件。
* 添加一行:您的服务器IP地址 example.com www.example.com
* 保存文件。
* 然后清除本地 DNS 缓存 (在某些操作系统上可能需要)。
* 现在,当您在本地浏览器中访问example.com
时,它会直接连接到您的服务器 IP 地址。在浏览器中访问
http://example.com
(或http://www.example.com
),您应该会看到您创建的 “Welcome to Example.com” 页面,而不是 Nginx 的默认欢迎页。
恭喜!您已经成功配置了您的第一个网站 Server Block。
后续步骤与进阶配置
完成了基本的安装和 Server Block 配置后,您可以根据需要进行更多高级配置:
- 配置 HTTPS (SSL/TLS): 为您的网站启用 HTTPS 是非常重要的,可以保护用户数据并提高网站的可信度。使用 Let’s Encrypt 是一个免费且自动化的选项,结合 Certbot 工具可以非常方便地获取和续订 SSL 证书。
- Nginx 作为反向代理: 如果您的网站是动态应用 (如 Node.js, Python Flask/Django, Ruby on Rails),通常会将应用服务器运行在非标准端口上,然后使用 Nginx 作为反向代理,将端口 80/443 的请求转发给应用服务器。这需要使用
proxy_pass
指令。 - Nginx 作为负载均衡器: 如果您有多个应用服务器实例,可以使用 Nginx 的
upstream
模块将流量分发到这些后端服务器,提高应用的可用性和性能。 - 静态资源缓存和压缩: 配置 Nginx 缓存静态资源 (
expires
指令) 并启用 Gzip 压缩可以显著提升网站加载速度。 - 设置自定义错误页面: 配置
error_page
指令可以为不同的 HTTP 错误码设置自定义的错误页面。 - 日志分析: 定期查看和分析 Nginx 的访问日志和错误日志,有助于监控网站流量、发现异常和排查问题。
- 安全性增强: 可以配置 Nginx 来抵御常见的 Web 攻击,例如限制请求速率、阻止恶意 User-Agent、配置安全响应头等。
- Nginx 模块: Nginx 支持许多标准模块和第三方模块,可以根据需求启用或编译包含特定模块的 Nginx。
- 性能优化: 根据服务器的硬件和流量情况,调整
worker_processes
,worker_connections
,keepalive_timeout
等参数,以及启用sendfile
等优化选项。
这些进阶配置超出了本文的基本安装范畴,但它们是您在实际部署中可能会遇到的重要环节。查阅 Nginx 官方文档是学习这些高级配置的最佳途径。
故障排除
在安装和配置过程中,可能会遇到一些问题。以下是一些常见的故障排除步骤:
- 检查 Nginx 服务状态: 始终使用
sudo systemctl status nginx
查看服务是否正在运行,以及是否有错误信息。 - 检查 Nginx 配置语法: 在重新加载或重启前,务必使用
sudo nginx -t
检查配置语法。 - 检查 Nginx 错误日志: 查看
/var/log/nginx/error.log
文件,它会记录 Nginx 运行时的错误信息,这通常是定位问题的最直接方法。 - 检查系统日志: 使用
sudo journalctl -u nginx
查看systemd
关于 Nginx 服务的日志,可能包含服务启动或停止失败的原因。 - 检查防火墙: 使用
sudo ufw status
确认端口 80 和 443 已被允许。如果您在云服务器上,也要检查云服务商的安全组或网络 ACL 规则。 - 检查网络连接: 确保服务器可以访问互联网 (特别是如果从官方仓库安装)。
- 检查域名解析: 如果您通过域名访问网站,使用
ping yourdomain.com
或nslookup yourdomain.com
检查域名是否正确解析到您的服务器 IP 地址。 - 检查文件权限: 确保 Nginx 进程 (通常是
www-data
用户) 对网站文件和目录有读取权限。 - 重启服务器: 作为最后的手段,如果其他方法都无效,可以尝试重启整个服务器。
总结
本文详细介绍了在 Ubuntu 系统上安装 Nginx 的两种主要方法:通过 Ubuntu 官方仓库和通过 Nginx 官方仓库。我们学习了如何使用 apt
进行安装,如何验证安装,如何通过 systemctl
管理 Nginx 服务,如何配置 UFW 防火墙,以及如何理解 Nginx 的配置文件结构并配置一个基本的 Server Block 来托管您的网站。
Nginx 是一个功能强大且灵活的 Web 服务器,是构建现代 Web 应用基础设施的重要组成部分。掌握在 Ubuntu 上安装和配置 Nginx 的基础知识,为您进一步探索其高级功能和优化 Web 性能奠定了坚实的基础。
记住,Nginx 的官方文档是您最好的学习资源。随着您对 Nginx 的使用越来越深入,查阅文档将帮助您解锁更多强大的功能和配置选项。
希望这篇详细的文章对您有所帮助!现在,您已经准备好在 Ubuntu 上开启您的 Nginx 之旅了。