什么是Nginx?
Nginx(engine x)是一个高性能的HTTP和反向代理Web服务器,同时也提供IMAP/POP3/SMTP服务。它以其高并发、低内存消耗和丰富的功能模块而广受欢迎,是目前互联网上使用最广泛的Web服务器之一。
Nginx的核心功能可以概括为三大类:Web服务器、反向代理和负载均衡。本文将围绕这三个核心功能展开学习。
Nginx的安装与基本命令
安装Nginx
在Ubuntu/CentOS等Linux系统上,可以通过包管理器快速安装Nginx:
1 | # Ubuntu/Debian |
也可以通过Docker快速运行一个Nginx容器:
1 | docker run -d nginx |
常用命令
以下是Nginx日常运维中最常用的命令:
| 命令 | 说明 |
|---|---|
| nginx -v | 查看Nginx版本 |
| service nginx status | 查看Nginx运行状态 |
| nginx -t | 检查配置文件语法是否正确 |
| nginx -s reload | 热加载配置文件(无需重启服务) |
| nginx -t && nginx -s reload | 校验配置并热部署(推荐组合使用) |
💡 小技巧:修改配置文件后,建议先用nginx -t检查语法,确认无误后再执行nginx -s reload热加载,避免因配置错误导致服务中断。
配置文件结构
Nginx的主配置文件通常位于/etc/nginx/nginx.conf。在修改配置前,建议先备份原文件:
1 | mv nginx.conf nginx.conf.bak |
Nginx配置采用层级结构,最外层是http块,内部可以包含多个server块,每个server块定义一个虚拟主机服务。通过include /etc/nginx/conf.d/*.conf;可以将配置文件拆分为多个文件,方便管理。
核心功能一:Web服务器
Nginx最基本的功能就是作为Web服务器,处理静态文件请求。
基础配置
一个最简单的Web服务器配置如下:
1 | http { |
配置项说明:
-
listen:指定监听的端口 -
server_name:指定域名或IP地址 -
root:指定网站文件的根目录 -
index:指定默认首页文件(默认为index.html)
访问http://localhost时,Nginx会自动返回$root/index.html文件。
location路径匹配
location指令用于根据请求URI匹配不同的处理规则。匹配优先级从高到低依次为:
| 匹配方式 | 语法 | 示例 |
|---|---|---|
| 精确匹配 | location = /path |
location = /index.html |
| 前缀匹配 | location ^~ /path |
location ^~ /static/ |
| 正则匹配 | location ~ pattern 或 location ~* pattern |
location ~ /video[0-9]\.mp4 |
| 普通前缀 | location /path |
location /app |
自定义错误页面
可以通过error_page指令自定义404、500等错误页面:
1 | server { |
try_files指令
try_files指令按顺序检查文件或目录是否存在,常用于单页应用(SPA)的路由处理:
1 | location / { |
核心功能二:反向代理
什么是反向代理?
-
正向代理:客户端通过代理服务器访问目标资源(如科学上网工具)
-
反向代理:客户端访问代理服务器,代理服务器将请求转发给后端的真实服务器
反向代理隐藏了真实服务器的信息,客户端只知道代理服务器的地址。
反向代理配置
将请求代理到本地3000端口运行的服务:
1 | location /api { |
反向代理的优势:
-
隐藏后端服务器的真实IP和端口
-
提供统一的入口,便于安全管理
-
可以结合缓存、限流等功能提升性能
核心功能三:负载均衡
当单台服务器无法承受高并发访问时,可以通过Nginx的负载均衡功能将请求分发到多台后端服务器。
负载均衡配置
使用upstream指令定义一组后端服务器:
1 | http { |
负载均衡策略
Nginx支持多种负载均衡算法:
| 策略 | 说明 |
|---|---|
| 轮询(默认) | 按顺序轮流分配请求 |
| 权重(weight) | 根据服务器性能分配不同权重,权重越大分配越多 |
| IP哈希(ip_hash) | 根据客户端IP分配,同一IP始终访问同一台服务器 |
| 最少连接(least_conn) | 将请求分配给当前连接数最少的服务器 |
| 备份(backup) | 标记为备用服务器,其他服务器不可用时才启用 |