Nginx 基础与核心概念
2025/9/17大约 4 分钟
Nginx 基础与核心概念
前置知识
在开始本教程之前,建议您具备以下基础知识:
- Linux基础命令
- 网络基础知识(HTTP/HTTPS协议)
- Web服务器基本概念
什么是Nginx?
Nginx (发音为"engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发,第一个公开版本发布于2004年10月4日。
Nginx的主要特点
- 高性能:采用事件驱动架构,能够处理大量并发连接
- 低内存消耗:相比传统服务器(如Apache)更节省资源
- 高并发:单机可支持数万并发连接
- 模块化设计:丰富的模块生态系统
- 反向代理与负载均衡:强大的代理服务器功能
- 热部署:支持不停止服务更新配置和二进制文件
Nginx与Apache对比
特性 | Nginx | Apache |
---|---|---|
架构 | 事件驱动 | 进程/线程驱动 |
内存使用 | 较低 | 较高 |
并发处理 | 优秀 | 一般 |
静态文件 | 极快 | 快 |
动态内容 | 需通过FastCGI | 原生支持 |
.htaccess | 不支持 | 支持 |
模块系统 | 编译时加载 | 运行时加载 |
Nginx工作原理
Nginx采用Master-Worker进程模型:
graph TD
A[Master Process] --> B[Worker Process 1]
A --> C[Worker Process 2]
A --> D[Worker Process N]
B --> E[处理连接1]
C --> F[处理连接2]
D --> G[处理连接N]
Master进程:
- 管理Worker进程
- 读取和验证配置
- 处理信号(如重启、关闭)
Worker进程:
- 实际处理请求
- 每个Worker独立处理连接
- 采用非阻塞I/O和事件驱动机制
安装Nginx
Linux系统安装
Ubuntu/Debian
# 更新软件包列表
sudo apt update
# 安装Nginx
sudo apt install nginx
# 启动Nginx
sudo systemctl start nginx
# 设置开机启动
sudo systemctl enable nginx
CentOS/RHEL
# 添加EPEL仓库
sudo yum install epel-release
# 安装Nginx
sudo yum install nginx
# 启动Nginx
sudo systemctl start nginx
# 设置开机启动
sudo systemctl enable nginx
Windows系统安装
- 从Nginx官网下载Windows版本
- 解压到指定目录(如C:\nginx)
- 运行nginx.exe
验证安装
# 检查Nginx版本
nginx -v
# 检查运行状态
systemctl status nginx
# 或使用
ps aux | grep nginx
访问 http://localhost
或服务器IP,应看到Nginx欢迎页面。
Nginx基本命令
# 启动Nginx
nginx
# 停止Nginx
nginx -s stop
# 优雅停止(处理完当前请求)
nginx -s quit
# 重新加载配置
nginx -s reload
# 重新打开日志文件
nginx -s reopen
# 测试配置文件
nginx -t
# 测试并显示完整配置
nginx -T
Nginx配置文件结构
Nginx配置文件通常位于 /etc/nginx/nginx.conf
,主要包含以下部分:
# 全局块:影响Nginx整体运行的配置
events {
# 事件驱动模块配置
}
http {
# HTTP服务器配置
server {
# 虚拟主机配置
location / {
# URL匹配配置
}
}
}
主要配置指令
- worker_processes: Worker进程数量(通常设为CPU核心数)
- worker_connections: 每个Worker的最大连接数
- include: 包含其他配置文件
- default_type: 默认MIME类型
- sendfile: 是否使用sendfile系统调用来传输文件
- keepalive_timeout: 保持连接的超时时间
虚拟主机配置
基于域名的虚拟主机
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name another.com www.another.com;
root /var/www/another.com;
index index.html;
}
基于端口的虚拟主机
server {
listen 8080;
server_name localhost;
root /var/www/port8080;
index index.html;
}
server {
listen 8081;
server_name localhost;
root /var/www/port8081;
index index.html;
}
日志配置
Nginx默认记录两种日志:
- 访问日志 (access_log): 记录所有客户端请求
- 错误日志 (error_log): 记录错误和警告信息
自定义日志格式
http {
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
}
性能优化基础
Worker配置
worker_processes auto; # 自动设置为CPU核心数
worker_rlimit_nofile 100000; # 每个Worker能打开的文件描述符数量
events {
worker_connections 4096; # 每个Worker的最大连接数
multi_accept on; # 一次接受所有新连接
use epoll; # Linux高效事件模型
}
TCP优化
http {
sendfile on; # 使用sendfile系统调用
tcp_nopush on; # 仅在sendfile开启时有效
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 30; # 保持连接超时
keepalive_requests 100; # 每个连接的最大请求数
client_body_timeout 12; # 客户端请求体超时
client_header_timeout 12; # 客户端请求头超时
send_timeout 10; # 响应超时
}
常见问题排查
检查配置语法
nginx -t
查看运行进程
ps aux | grep nginx
检查监听端口
netstat -tulnp | grep nginx
# 或
ss -tulnp | grep nginx
查看错误日志
tail -f /var/log/nginx/error.log
总结
本章介绍了Nginx的基本概念、安装方法和核心配置。关键点包括:
- Nginx的高性能事件驱动架构
- Master-Worker进程模型
- 多平台安装方法
- 基本命令和配置结构
- 虚拟主机配置
- 日志和性能优化基础
在下一章中,我们将深入探讨Nginx的静态资源服务、缓存配置和高级性能优化技巧。