Nginx 在 Ubuntu 上的完整指南:安装、配置与部署
1. 引言
Nginx(发音为 "Engine-X")是一款高性能的开源 Web 服务器、反向代理服务器、负载均衡器和 HTTP 缓存工具。它以其高并发、低内存占用和稳定性著称,广泛应用于互联网基础设施中。本指南将详细介绍如何在 Ubuntu 系统上安装、卸载、配置 Nginx,并深入探讨其核心原理和应用场景。
2. 技术背景
2.1 Nginx 的起源与发展
- 由俄罗斯开发者 Igor Sysoev 于 2004 年发布,旨在解决 C10K 问题(同时处理 10,000 个并发连接)。
- 采用事件驱动架构,相比传统多进程/多线程模型(如 Apache),资源消耗更低,性能更高。
2.2 Nginx 的核心优势
- 高并发:支持数万并发连接,适合高流量网站。
- 低内存占用:每个连接仅需少量内存。
- 反向代理与负载均衡:可轻松实现流量分发。
- 静态内容高效服务:静态文件(如 HTML、CSS、图片)服务性能优异。
- 模块化设计:支持动态模块加载,扩展性强。
3. 应用使用场景
3.1 Web 服务器
直接托管静态网站或动态网站(如配合 PHP-FPM、Node.js)。
3.2 反向代理
将客户端请求转发到后端服务器(如 Tomcat、Gunicorn),隐藏真实服务器信息。
3.3 负载均衡
在多台后端服务器间分配流量,提高系统可用性和扩展性。
3.4 HTTP 缓存
缓存静态内容或动态响应,减少后端负载,加速访问。
3.5 SSL/TLS 终止
集中管理 HTTPS 加密,减轻后端服务器的计算压力。
4. 不同场景下的详细代码实现
4.1 安装 Nginx
步骤 1:更新软件包列表
sudo apt update
步骤 2:安装 Nginx
sudo apt install nginx -y
步骤 3:验证安装
nginx -v # 查看版本
systemctl status nginx # 检查运行状态
步骤 4:启动/停止/重启 Nginx
sudo systemctl start nginx # 启动
sudo systemctl stop nginx # 停止
sudo systemctl restart nginx # 重启
sudo systemctl reload nginx # 重新加载配置(不中断服务)
4.2 卸载 Nginx
步骤 1:停止 Nginx 服务
sudo systemctl stop nginx
步骤 2:卸载 Nginx 软件包
sudo apt purge nginx nginx-common -y
步骤 3:删除残留配置和日志
sudo rm -rf /etc/nginx /var/log/nginx
4.3 配置 Nginx
场景 1:托管静态网站
-
创建网站目录和测试页面:
sudo mkdir -p /var/www/example.com/html echo "<h1>Welcome to Example.com!</h1>" | sudo tee /var/www/example.com/html/index.html
-
配置 Nginx 虚拟主机:
sudo nano /etc/nginx/sites-available/example.com
添加以下内容:
server { listen 80; server_name example.com www.example.com; root /var/www/example.com/html; index index.html; location / { try_files $uri $uri/ =404; } }
-
启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置语法 sudo systemctl reload nginx
-
本地测试(修改
/etc/hosts
):127.0.0.1 example.com www.example.com
浏览器访问
http://example.com
。
场景 2:反向代理到后端服务
假设后端服务运行在 http://localhost:3000
:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
场景 3:负载均衡
配置多个后端服务器:
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
}
}
5. 原理解释与核心特性
5.1 事件驱动架构
Nginx 使用 epoll/kqueue(Linux/BSD)实现高效事件通知,单线程即可处理数万连接,避免了多线程的上下文切换开销。
5.2 非阻塞 I/O
通过异步非阻塞方式处理请求,避免等待慢速操作(如磁盘 I/O 或数据库查询)阻塞整个进程。
5.3 模块化设计
- 核心模块:HTTP、Mail、Stream 等基础功能。
- 第三方模块:如 Lua(OpenResty)、图像处理等。
6. 原理流程图
客户端请求 → Nginx(反向代理/负载均衡) → 后端服务器(如 Tomcat、Node.js)
↑
(静态文件直接返回)
7. 环境准备
- Ubuntu 20.04/22.04 LTS
- Root 或 sudo 权限
- 基础命令行知识
8. 实际应用代码示例
8.1 动态内容代理(PHP-FPM)
-
安装 PHP-FPM:
sudo apt install php-fpm php-mysql -y
-
配置 Nginx 支持 PHP:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; }
9. 测试步骤
-
检查 Nginx 状态:
systemctl status nginx
-
测试配置语法:
nginx -t
-
压力测试(使用
ab
):sudo apt install apache2-utils -y ab -n 10000 -c 100 http://example.com/
10. 疑难解答
10.1 端口冲突
若端口 80 被占用(如 Apache):
sudo netstat -tulnp | grep :80
sudo systemctl stop apache2
10.2 权限问题
确保 Nginx 用户(www-data
)有权限访问网站目录:
sudo chown -R www-data:www-data /var/www/example.com
11. 未来展望与技术趋势
- HTTP/3 支持:Nginx 已支持 QUIC/HTTP3,提升移动端性能。
- 边缘计算:结合 CDN 和边缘节点,进一步降低延迟。
- AI 集成:通过 Wasm 模块实现智能流量分析。
12. 总结
- Nginx 是高性能 Web 基础设施的核心组件,适用于 Web 服务、反向代理、负载均衡等多种场景。
- Ubuntu 上的安装和配置简单,通过模块化设计可灵活扩展功能。
- 掌握 Nginx 原理和优化技巧,能显著提升系统可靠性和性能。
- 点赞
- 收藏
- 关注作者
评论(0)