如何在Ubuntu上安装Nginx
介绍
Nginx是全球最流行的网络服务器之一,驱动着全球超过33%的所有网站。它负责托管一些互联网上最大和流量最高的网站,包括Netflix、Pinterest和Airbnb。Nginx是一种轻量级、高性能的选择,作为网络服务器和反向代理都表现出色。
本综合指南涵盖了在 Ubuntu 22.04、24.04 和 25.04 上安装和配置 Nginx 的内容,包括防火墙配置、安全加固、性能优化和常见问题的故障排除的逐步说明。
关键要点
- 安装与设置:学习如何从Ubuntu的官方软件库安装Nginx,使用UFW配置防火墙规则,以及验证安装是否成功
- 服务管理:掌握 systemd 命令以启动、停止、启用和重新加载 Nginx,并验证服务状态和配置
- 服务器配置:配置服务器块(虚拟主机)以托管多个域,设置文档根目录,并管理Nginx指令
- 安全加固:实施安全最佳实践,包括使用 Let's Encrypt 的 SSL/TLS、安全头、速率限制和访问控制。
- 性能优化:优化工作进程、连接限制、缓存和压缩以实现最佳性能
- 反向代理和负载均衡: 将Nginx设置为后端应用程序的反向代理,并具备负载均衡的功能
- 故障排除与日志:监控访问和错误日志,诊断常见问题,并实施有效的调试策略
- 特定版本功能: 了解 Ubuntu 22.04、24.04 和 25.04 在 Nginx 部署中的关键区别
- 维护与监测: 建立备份程序,实施监测,定期更新以维护服务器健康
- 生产就绪: 部署一个安全、优化和配置良好的 Nginx 服务器,适用于生产环境
使用 DigitalOcean 应用平台从 GitHub 部署您的应用程序。让 DigitalOcean 专注于扩展您的应用。
先决条件
在开始本指南之前,您应该拥有:
- Ubuntu 服务器: 已设置和安装 Ubuntu 22.04 LTS、24.04 LTS 或 25.04。
- 非根用户:具有配置的sudo权限的普通用户帐户。
- 域名(可选):用于服务器块配置和SSL设置
- 基本终端知识: 熟悉命令行操作.
Ubuntu版本兼容性
| Ubuntu版本 | Nginx 版本 | 支持状态 | 笔记 |
|---|---|---|---|
| Ubuntu 22.04 LTS | 1.18.0及以上 | 完全支持 | 长期支持至2027年 |
| Ubuntu 24.04 LTS | 1.24.0+ | 完全支持 | 最新的LTS版本,增强了安全性 |
| Ubuntu 25.04 | 1.26.0及以上 | 完全支持 | 最新功能和性能改进 |
您可以通过遵循我们的 Ubuntu 初始服务器设置指南来学习如何配置常规用户帐户。
要了解如何在 DigitalOcean 上设置域名,请参考我们的《DigitalOcean DNS 入门》。
当您有可用的账户时,请以非root用户身份登录以开始。
第一步 – 安装 Nginx
Nginx 在 Ubuntu 支持的所有版本的默认软件库中可用。我们将使用 apt 包管理系统安装最新的稳定版本。
更新系统软件包
首先,更新您的本地软件包索引,以确保您可以访问最新的软件包列表:
- sudo apt update
- sudo apt upgrade -y
安装 Nginx
使用以下命令安装Nginx:
- sudo apt install nginx -y
当提示确认安装时,请按Y。如果提示您重新启动任何服务,请按ENTER接受默认设置并继续。apt将会在您的服务器上安装Nginx及其所需的依赖项。
验证安装
检查已安装的 Nginx 版本:
- nginx -v
预期输出:
nginx version: nginx/1.24.0 (Ubuntu)
检查安装状态
验证Nginx是否正确安装:
- dpkg -l | grep nginx
您应该看到类似于以下的输出:
ii nginx-common 1.24.0-1ubuntu1 all small, powerful, scalable web/proxy server - common files
ii nginx-core 1.24.0-1ubuntu1 amd64 nginx web/proxy server (core version)
ii nginx 1.24.0-1ubuntu1 all small, powerful, scalable web/proxy server (default version)
步骤 2 – 调整防火墙
在测试 Nginx 之前,需要配置防火墙软件以允许访问该服务。Nginx 在安装时会将自己注册为 ufw 服务,这使得允许 Nginx 访问变得简单。
通过输入以下命令列出 ufw 知道如何处理的应用配置:
- sudo ufw app list
您应该获取应用程序配置文件的列表:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
如输出所示,Nginx 有三个可用配置文件:
- Nginx Full: 此配置文件打开80端口(普通未加密网页流量)和443端口(TLS/SSL加密流量)
- Nginx HTTP: 此配置仅开放端口80(正常的未加密网络流量)
- Nginx HTTPS:该配置仅开放端口443(TLS/SSL加密流量)
建议您启用最严格的配置文件,同时仍然允许您已配置的流量。目前,我们只需要允许80端口的流量.
您可以通过输入以下内容来启用此功能:
- sudo ufw allow 'Nginx HTTP'
您可以通过输入来验证更改:
- sudo ufw status
输出将指示哪些HTTP流量是被允许的:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
步骤 3 – 检查您的网络服务器
在安装过程结束时,Ubuntu 22.04 启动 Nginx。 Web 服务器应该已经在运行了。
我们可以通过输入以下命令来检查 systemd 初始化系统,以确保服务正在运行:
- systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-03-01 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
正如这个结果所确认的,服务已经成功启动。然而,测试此功能的最好方法是实际从Nginx请求一个页面。
您可以通过导航到服务器的 IP 地址来访问默认的 Nginx 登陆页面,以确认软件正常运行。如果您不知道服务器的 IP 地址,可以使用 icanhazip.com 工具找到它,该工具将给出您从互联网上另一个位置接收到的公共 IP 地址:
- curl -4 icanhazip.com
当你拥有服务器的IP地址时,将其输入到浏览器的地址栏中:
http://your_server_ip
您应该会看到默认的 Nginx 登陆页面:
如果您在此页面上,说明您的服务器运行正常,准备好进行管理。
步骤4 - 管理Nginx进程
现在您已经启动并运行了网络服务器,让我们回顾一些基本的管理命令。
要停止您的网络服务器,请输入:
- sudo systemctl stop nginx
当网页服务器停止时,要启动它,请输入:
- sudo systemctl start nginx
要停止然后重新启动服务,请输入:
- sudo systemctl restart nginx
如果您只是进行配置更改,Nginx 通常可以在不中断连接的情况下重新加载。要做到这一点,请输入:
- sudo systemctl reload nginx
默认情况下,Nginx 被配置为在服务器启动时自动启动。如果这不是您想要的,您可以通过输入以下命令来禁用此行为:
- sudo systemctl disable nginx
要重新启用该服务在启动时启动,您可以输入:
- sudo systemctl enable nginx
您现在已经学习了基本的管理命令,并应该准备好配置网站以托管多个域。
步骤5 - 设置服务器块(推荐)
使用 Nginx 网络服务器时,可以使用 服务器块(类似于 Apache 中的虚拟主机)来封装配置细节,并从单个服务器托管多个域名。我们将设置一个名为 your_domain 的域名,但您应该 将其替换为您自己的域名。
在 Ubuntu 22.04 上,Nginx 默认启用一个服务器块,配置为从 /var/www/html 目录中提供文档。虽然这对于单个站点工作得很好,但如果您托管多个站点,则可能会变得繁琐。我们不修改 /var/www/html,而是在 /var/www 中为您的 your_domain 站点创建一个目录结构,同时保留 /var/www/html 作为默认目录,如果客户端请求与其他站点没有匹配时,将提供该目录的内容。
如下面所示,为 your_domain 创建目录,使用 -p 标志来创建任何必要的父目录:
- sudo mkdir -p /var/www/your_domain/html
接下来,使用 $USER 环境变量分配目录的所有权:
- sudo chown -R $USER:$USER /var/www/your_domain/html
如果您没有修改 umask 值(它设置了默认的文件权限),那么您的网站根目录的权限应该是正确的。为了确保您的权限是正确的,并允许所有者读取、写入和执行文件,同时只授予组和其他用户读取和执行权限,您可以输入以下命令:
- sudo chmod -R 755 /var/www/your_domain
接下来,使用 nano 或您喜欢的编辑器创建一个示例 index.html 页面:
- nano /var/www/your_domain/html/index.html
在里面,添加以下示例 HTML:
<html>
<head>
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain server block is working!</h1>
</body>
</html>
通过按 Ctrl+X 保存并关闭文件以退出,然后在提示保存时,按 Y 然后按 Enter。
为了让 Nginx 服务这些内容,必须创建一个包含正确指令的服务器块。与其直接修改默认配置文件,不如在 /etc/nginx/sites-available/your_domain 创建一个新的配置文件:
- sudo nano /etc/nginx/sites-available/your_domain
将以下配置块粘贴进去,这个配置块与默认配置相似,但已更新为我们的新目录和域名:
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
请注意,我们已将 root 配置更新到我们新的目录,并将 server_name 更新为我们的域名。
接下来,通过创建一个链接将文件启用到 sites-enabled 目录,Nginx 在启动时会从该目录读取:
- sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
注意: Nginx使用一种叫做符号链接(symlinks)的常见做法来跟踪哪些服务器块已启用。创建符号链接就像在磁盘上创建一个快捷方式,因此您可以在想要启用服务器块时,稍后从sites-enabled目录中删除快捷方式,而保留sites-available中的服务器块。
现在启用了两个服务器块,并根据它们的 listen 和 server_name 指令进行了配置,以响应请求(您可以在我们的详细指南中了解有关 Nginx 如何处理这些指令的更多信息)。
your_domain: 将会响应对your_domain和www.your_domain的请求。default: 将响应所有在80端口上且不匹配其他两个区块的请求。
为了避免因添加额外服务器名称而可能出现的哈希桶内存问题,需要在/etc/nginx/nginx.conf文件中调整一个值。打开文件:
- sudo nano /etc/nginx/nginx.conf
找到 server_names_hash_bucket_size 指令并删除 # 符号以取消注释该行。如果您使用的是 nano,您可以通过按 CTRL 和 w 快速在文件中搜索单词。
注意: 注释掉代码行——通常在行的开头加上 # ——是禁用它们的另一种方式,而不需要实际删除它们。许多配置文件的多个选项是注释掉的,以便可以通过在活动代码和文档之间切换,来启用或禁用它们。
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
完成后保存并关闭文件。
接下来,测试以确保您的 Nginx 文件中没有任何语法错误:
- sudo nginx -t
如果没有任何问题,请重启 Nginx 以启用您的更改:
- sudo systemctl restart nginx
Nginx 现在应该在为您的域名提供服务。您可以通过导航到 http://your_domain 来测试这一点,您应该看到类似这样的内容:
步骤 6 – 安全加固和优化
在进行文件管理之前,让我们为生产使用安全优化您的Nginx安装。
基本安全配置
编辑主要的 Nginx 配置文件:
- sudo nano /etc/nginx/nginx.conf
在 http 块中添加这些安全指令:
Hide Nginx version
server_tokens off;
Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
Disable server signature
server_tokens off;
Limit request size
client_max_body_size 10M;
Timeout settings
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
性能优化
将这些性能优化添加到 /etc/nginx/nginx.conf 中:
Worker processes (adjust based on CPU cores)
worker_processes auto;
Worker connections
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
Gzip compression
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/json
application/javascript
application/xml+rss
application/atom+xml
image/svg+xml;
测试和应用配置
测试你的配置:
- sudo nginx -t
如果测试通过,请重新加载Nginx:
- sudo systemctl reload nginx
SSL/TLS准备
准备SSL证书安装:
- Install Certbot
- sudo apt install certbot python3-certbot-nginx -y
-
- Check if Certbot is working
- sudo certbot --version
第七步 - 熟悉重要的 Nginx 文件和目录
现在你知道如何管理Nginx服务本身,应该花几分钟时间熟悉一些重要的目录和文件。
内容
/var/www/html: 实际的网页内容,默认情况下仅包含您之前看到的默认Nginx页面,是从/var/www/html目录提供的。可以通过更改Nginx配置文件进行更改.
服务器配置
/etc/nginx: Nginx 配置目录。所有 Nginx 配置文件都位于这里。/etc/nginx/nginx.conf: 主 Nginx 配置文件。这可以被修改以更改 Nginx 全局配置。/etc/nginx/sites-available/: 存放每个站点服务器块的目录。Nginx 不会使用此目录中的配置文件,除非它们链接到sites-enabled目录。通常,所有服务器块的配置都在该目录中完成,然后通过链接到另一个目录来启用。/etc/nginx/sites-enabled/:存储启用的每个站点服务器块的目录。通常,这些是通过链接到sites-available目录中的配置文件来创建的。/etc/nginx/snippets: 该目录包含可以在 Nginx 配置的其他地方包含的配置片段。可以重复使用的配置段是重构为片段的良好候选者。
服务器日志
/var/log/nginx/access.log: 除非 Nginx 被配置为做其他处理,否则每个请求都会被记录在此日志文件中。/var/log/nginx/error.log: 任何 Nginx 错误将被记录在此日志中。
我该如何保护我的Nginx安装?
遵循以下安全最佳实践来增强您的 Nginx 安装:
| 安全实践 | 实施 | 命令/配置 | 优先级 |
|---|---|---|---|
| 保持 Nginx 更新 | 定期更新 Nginx 和系统软件包 | | 高 |
| 配置防火墙 | 使用 UFW 仅限制访问必要的端口 | | 高 |
| 启用 SSL/TLS | 使用 Let's Encrypt 安装 SSL 证书 | | 高 |
| 隐藏服务器信息 | 防止 Nginx 版本泄露 | 将 server_tokens off; 添加到 /etc/nginx/nginx.conf | 中等 |
| 安全头部 | 添加安全头以防止常见攻击 | 在服务器块中添加头部(见下面的示例) | 中等 |
| 速率限制 | 防御DDoS和暴力破解攻击 | 配置limit_req_zone和limit_req | 中等 |
| 强认证 | 为管理界面使用安全密码 | 实现HTTP基本认证或OAuth | 中等 |
| 定期备份 | 备份配置和网页内容 | | 中等 |
| 访问控制 | 限制对敏感目录的访问 | 使用 deny all; 或 IP 白名单 | 低 |
| 日志监控 | 监控访问和错误日志以发现可疑活动 | | 低 |
示例安全头配置
将这些头部添加到您的服务器块中以增强安全性:
server {
...
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
...
}
速率限制配置
将此配置添加到您的服务器块中以进行速率限制:
server {
...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
}
常见问题 (FAQ)
1. 我如何在 Ubuntu 22.04/24.04/25.04 上启动和停止 Nginx?
使用 systemctl 命令管理 Nginx 服务:
- Start Nginx
- sudo systemctl start nginx
-
- Stop Nginx
- sudo systemctl stop nginx
-
- Restart Nginx
- sudo systemctl restart nginx
-
- Reload configuration without stopping
- sudo systemctl reload nginx
-
- Enable Nginx to start on boot
- sudo systemctl enable nginx
-
- Disable Nginx from starting on boot
- sudo systemctl disable nginx
2. 我该如何检查 Nginx 是否正在运行?
使用这些命令来验证 Nginx 状态:
- Check service status
- sudo systemctl status nginx
-
- Check if Nginx is listening on ports
- sudo netstat -tlnp | grep nginx
-
- Test configuration
- sudo nginx -t
-
- Check Nginx processes
- ps aux | grep nginx
3. 我该如何为 Nginx 配置 UFW?
UFW提供三种Nginx配置文件,以满足不同的安全级别:
- Allow HTTP only (port 80)
- sudo ufw allow 'Nginx HTTP'
-
- Allow HTTPS only (port 443)
- sudo ufw allow 'Nginx HTTPS'
-
- Allow both HTTP and HTTPS
- sudo ufw allow 'Nginx Full'
-
- Check UFW status
- sudo ufw status
4. 在Ubuntu上默认的Nginx配置文件是什么?
主配置文件位于 /etc/nginx/nginx.conf。站点特定配置存储在:
- 可用站点:
/etc/nginx/sites-available/ - 启用的网站:
/etc/nginx/sites-enabled/ - 默认站点:
/etc/nginx/sites-available/default
5. 我如何将 Nginx 设置为反向代理?
在/etc/nginx/sites-available/your-domain中配置一个服务器块:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
6. 我该如何排除Nginx错误?
检查这些常见的故障排除步骤:
- Test configuration syntax
- sudo nginx -t
-
- Check error logs
- sudo tail -f /var/log/nginx/error.log
-
- Check access logs
- sudo tail -f /var/log/nginx/access.log
-
- Check system logs
- sudo journalctl -u nginx -f
-
- Verify port binding
- sudo netstat -tlnp | grep :80
7. Ubuntu 22.04、24.04 和 25.04 在 Nginx 上有什么区别?
主要区别包括:
| 功能 | Ubuntu 22.04 | Ubuntu 24.04 | Ubuntu 25.04 |
|---|---|---|---|
| Nginx 版本 | 1.18.0及以上 | 1.24.0+ | 1.26.0及以上 |
| 支持至 | 2027 | 2029 | 2026 |
| 安全更新 | 标准 | 增强的 | 最新 |
| 表现 | 好 | 更好 | 最佳 |
| 新功能 | 基础 | 高级 | 尖端 |
结论
您现在已经在 Ubuntu 22.04、24.04 或 25.04 上安装并配置了一个功能齐全的 Nginx 网络服务器。在本指南中,我们已经详细介绍了设置 Nginx 的完整过程,从使用 Ubuntu 官方软件库进行初始安装到高级安全加固和性能优化。您已经学习如何配置 UFW 防火墙以保护您的网络服务器,使用 systemd 命令管理 Nginx 服务,以及设置服务器块以托管多个域名。本指南还为您提供了实施反向代理配置和通过日志分析排除常见问题的基本知识。
了解不同Ubuntu版本的特性将帮助您在部署环境中做出明智的决策。凭借Nginx强大的功能和优化的性能,您的Web服务器现在已经准备好托管网站,作为反向代理,实施负载均衡,并处理高流量应用程序。我们所涵盖的安全措施和性能调优选项将确保您的Web服务器在生产环境中保持稳定、安全和高效。
下一步
- LEMP 堆栈:在 Ubuntu 上构建完整的应用程序堆栈,安装 Linux、Nginx、MySQL、PHP (LEMP 堆栈) 的教程
- SSL/TLS设置: 使用Let’s Encrypt在Ubuntu上保护您的Nginx网站
- 反向代理:为您的应用程序配置 Nginx 作为反向代理
