Nginx Web服务器详解
目录
-
引言:什么是Nginx?
(图片来源网络,侵删)- 1 Nginx的定义与起源
- 2 Nginx的核心优势
- 3 Nginx的典型应用场景
-
Nginx核心架构
- 1 多进程模型(Master-Worker)
- 2 事件驱动模型(Epoll)
- 3 模块化设计
- 4 进程通信
-
Nginx安装与配置
- 1 安装方式(源码编译 vs. 包管理器)
- 2 目录结构
- 3 核心配置文件解析 (
nginx.conf) - 4 Nginx命令行工具
-
核心模块详解
- 1
main块:全局配置 - 2
events块:事件模型配置 - 3
http块:HTTP服务器核心 - 4
server块:虚拟主机配置 - 5
location块:URI匹配与处理
- 1
-
常用功能模块
(图片来源网络,侵删)- 1 静态资源服务
- 2 反向代理
- 3 负载均衡
- 4 负载均衡策略
- 5 缓存配置
- 6 SSL/TLS 配置(HTTPS)
- 7 URL 重写与重定向
-
高级应用
- 1 动态分离(动静分离)
- 2 配置文件优化与性能调优
- 3 日志管理与分析
- 4 安全加固
-
监控与排错
- 1
status模块监控 - 2
stub_status模块详解 - 3 常见问题排查思路
- 4 日志分析技巧
- 1
引言:什么是Nginx?
1 Nginx的定义与起源
Nginx (发音 "Engine-X") 是一款由俄罗斯程序员伊戈尔·赛索耶夫(Igor Sysoev)于2004年编写的高性能、轻量级的Web服务器和反向代理服务器,最初,它被创建用来解决C10k问题(即如何同时处理10,000个并发连接),Nginx已成为全球最受欢迎的Web服务器之一,广泛应用于大型网站、云计算和微服务架构中。
2 Nginx的核心优势
- 高并发、高性能:基于事件驱动的异步非阻塞模型,使其能够高效处理大量并发连接,资源消耗极低。
- 高可靠性:Master-Worker架构使得工作进程崩溃不会影响整体服务,主进程可以快速重新拉起新的工作进程。
- 丰富的功能:不仅提供Web服务,还集成了反向代理、负载均衡、缓存、邮件代理等功能。
- 可扩展性强:模块化设计允许用户根据需要灵活地添加或移除功能。
- 配置简洁:配置文件语法清晰、易于理解和维护。
3 Nginx的典型应用场景
- 静态资源服务器:高效地提供HTML、CSS、JavaScript、图片、视频等静态文件。
- 反向代理服务器:作为前端入口,将客户端请求转发到后端的多个应用服务器。
- 负载均衡器:在反向代理的基础上,将流量分发到不同的后端服务器,以提高系统可用性和处理能力。
- API网关:在微服务架构中,作为统一的流量入口,处理路由、认证、限流等。
- HTTPS服务器:提供安全的加密通信。
Nginx核心架构
1 多进程模型(Master-Worker)
Nginx采用经典的Master-Worker多进程模型。

- Master进程 (主进程):
- 负责读取和验证配置文件。
- 创建、管理Worker子进程。
- 处理系统信号(如重启、停止)。
- 不处理网络请求,只负责管理工作进程。
- Worker进程 (工作进程):
- 实际处理网络请求的进程。
- 每个Worker进程都是独立的,处理不同的连接。
- 它们之间通过共享内存、Unix套接字等方式进行通信。
- 当一个Worker进程因异常退出时,Master进程会立即创建一个新的Worker进程,保证服务的连续性。
优势:
- 稳定性:单个Worker进程的崩溃不会影响其他进程和整个服务。
- 可扩展性:可以通过调整
worker_processes来利用多核CPU。
2 事件驱动模型(Epoll)
这是Nginx高性能的关键,Nginx运行在Linux等支持epoll的系统上。
- 阻塞模型:传统服务器(如Apache的默认模式)为每个连接创建一个线程/进程,当连接在等待I/O(如读取数据)时会阻塞,无法处理其他连接,导致资源浪费。
- 非阻塞I/O + 多路复用:Nginx的Worker进程在
epoll的帮助下,可以同时监视成千上万个连接,当一个连接有数据可读或可写时,epoll会通知Worker进程进行处理,如果没有事件,Worker进程会休眠,不消耗CPU资源。
优势:
- 低资源消耗:一个Worker进程可以处理成千上万的并发连接。
- 高吞吐量:避免了进程/线程切换的开销,处理效率极高。
3 模块化设计
Nginx的功能由不同的模块组合而成。
- 核心模块:提供最基本、最核心的功能(如进程管理、事件驱动)。
- 标准HTTP模块:提供大部分Web服务器功能(如
ngx_http_core_module,ngx_http_proxy_module)。 - 第三方模块:由社区或开发者开发,提供特定功能(如
ngx_lua,ngx_echo)。
这种设计使得Nginx非常灵活,可以根据需求编译时选择性地包含或排除模块。
Nginx安装与配置
1 安装方式
- 源码编译安装:
- 优点:高度可定制,可以选择需要的模块,性能最优。
- 缺点:过程相对复杂,需要手动解决依赖。
- 步骤:
- 安装依赖:
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev - 下载源码:
wget http://nginx.org/download/nginx-1.23.x.tar.gz - 解压并进入目录:
tar -zxvf nginx-1.23.x.tar.gz && cd nginx-1.23.x - 配置编译选项:
./configure --prefix=/usr/local/nginx --with-http_ssl_module - 编译与安装:
make && sudo make install
- 安装依赖:
- 包管理器安装:
- 优点:简单快捷,系统会自动管理依赖和更新。
- 缺点:版本可能不是最新的,定制性差。
- Ubuntu/Debian:
sudo apt-get install nginx - CentOS/RHEL:
sudo yum install nginx
2 目录结构
以源码安装到/usr/local/nginx为例:
/usr/local/nginx/
├── conf/ # 配置文件目录
│ └── nginx.conf # 主配置文件
├── html/ # 静态文件根目录
│ ├── 50x.html
│ └── index.html
├── logs/ # 日志文件目录
│ ├── access.log
│ ├── error.log
│ └── nginx.pid
└── sbin/ # 可执行文件目录
└── nginx # 主程序
3 核心配置文件解析 (nginx.conf)
配置文件由多个“块”组成,它们之间有明确的层级关系。
# 1. main 块 user nobody; # 运行Nginx worker进程的用户 worker_processes auto; # worker进程数量,通常设置为
