Nginx 核心功能核心解析
Nginx 是一款轻量级、高性能的开源 Web 服务器与代理服务工具,凭借高并发处理能力、低资源占用和灵活的模块化设计,成为现代 Web 架构的核心组件,其核心功能围绕正向代理 、反向代理(七层 / 四层) 、缓存机制 和URL 重写与正则匹配展开,同时延伸出负载均衡、动静分离等实用能力,以下为简易且全面的功能解析,并补充核心实用知识点。
一、网络代理层级:三层、四层、七层代理的核心区别
网络代理的层级基于 OSI 七层模型划分,不同层级的代理工作机制、性能、功能差异极大,Nginx 主要支持四层(TCP/UDP) 和七层(HTTP/HTTPS) 代理,是运维中最常用的两种模式。
1. 三层代理(网络层)
- 工作层级 :OSI 第三层(网络层),基于IP 地址转发
- 核心协议:IP 协议
- 工作机制:仅解析源 / 目标 IP,不关注端口、应用层数据,直接转发数据包
- 特点:性能极高,无应用层解析开销;仅支持 IP 级转发,无法做路由、负载均衡、缓存等高级操作
- 代表工具:路由器、iptables(网络层规则)
2. 四层代理(传输层)
- 工作层级 :OSI 第四层(传输层),基于IP + 端口转发
- 核心协议:TCP、UDP
- 工作机制:解析 TCP/UDP 头部,根据源 IP、目标 IP、端口转发流量,不解析应用层数据(如 HTTP 请求头)
- 特点:性能接近三层代理,支持 TCP/UDP 负载均衡;无法识别 HTTP 请求、做缓存、URL 重写
- Nginx 支持:Nginx 1.9+ 支持 stream 模块实现四层代理
3. 七层代理(应用层)
- 工作层级 :OSI 第七层(应用层),基于应用层协议转发
- 核心协议:HTTP、HTTPS、WebSocket
- 工作机制:完整解析应用层数据(如 HTTP 请求头、URL、Cookie),可根据请求内容做路由、重写、缓存、限流
- 特点:功能最丰富,支持 HTTP/HTTPS 精细化控制;性能略低于四层代理(需解析应用层数据)
- Nginx 支持:默认 http 模块实现七层代理,是 Nginx 最核心的功能
层级对比总结
表格
| 层级 | 工作依据 | 性能 | 核心功能 | Nginx 模块 |
|---|---|---|---|---|
| 三层 | IP 地址 | 极高 | 基础转发 | 无 |
| 四层 | IP + 端口 | 高 | TCP/UDP 负载均衡 | stream |
| 七层 | 应用协议 | 中高 | HTTP 路由、缓存、重写 | http |
一、正向代理:客户端的 "网络中间人"
核心定义
正向代理部署在客户端与目标服务器 之间,代表客户端向目标服务器发起请求,将响应结果返回给客户端,目标服务器仅能识别代理服务器的 IP,无法获取客户端真实信息。仅能看到代理服务器 IP
核心应用场景
- 内网访问管控:限制企业员工访问非工作类网站(如社交、视频平台);
- 网络匿名访问:隐藏客户端真实 IP,提升访问安全性;
- 资源缓存加速:缓存外网公共资源(如软件安装包、镜像文件),减少企业外网带宽消耗。
2. Nginx 七层正向代理(HTTP/HTTPS)配置
Nginx 默认不支持 HTTPS 正向代理,需通过stream模块实现,以下为 HTTP 正向代理基础配置:
vi /usr/local/nginx/conf/nginx.conf
server {
listen 8080; # 代理监听端口
resolver 8.8.8.8; # DNS解析服务器
resolver_timeout 5s;
#启用代理CONNECT方法(支持HTTPS)
proxy_connect;
proxy_connect_allow 443 80; #允许代理到80和443端口
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
#处理HTTP/HHTPS请求
location /{
proxy_pass $scheme://$http_host$request_uri #动态协议
proxy_set_header Host $http_host;
#优化缓冲区
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
#保持连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
ngint -t #测试一下配置文件是否正确
nginx -s reload #重载
2,验证正向代理(windows中验证,使用浏览器,设置http和https代理即可)
首先找到设置点网络和Internet找到代理(或者直接在设置那个地方搜索代理)然后在下面找手动配置代理并配置代理IP和端口点确定。然后访问网站
3,在linux系统中验证,使用curl命令,并指定代理服务器进行访问测试。如:curl -x http://192.168.10.101:8080
4.然后在查看nginx的访问日志(/usr/local/nginx/logs/access.log)就可以看到windows或linux下设置代理IP和端口后,本地电脑访问的所有页面会通过代理服务器进行访问网页,实现了正向代理的功能,并且隐藏了用户自己真实的IP。
3. 核心说明
- 客户端需配置代理地址为
Nginx服务器IP:8080 resolver必须配置,用于解析目标域名- HTTPS 正向代理需使用四层 stream 模块,不支持解析 HTTPS 请求内容
补充核心知识点
- Nginx 默认不支持 HTTPS 正向代理,需通过ngx_http_proxy_connect_module第三方模块实现,编译安装时需手动添加;
- 正向代理配置核心是指定DNS 解析服务器 (如 8.8.8.8、1.1.1.1)和允许代理的端口(通常为 80/443);
- 验证方式支持多端:Windows 可通过浏览器配置代理 IP / 端口,Linux 可通过
curl -x 代理IP:端口 目标网址测试。
二、反向代理:服务端的 "智能调度器"
核心定义
反向代理部署在服务端集群前端 ,客户端仅需访问代理服务器,由代理服务器将请求转发至后端具体的应用服务器,客户端无法感知后端服务的真实地址,代理的对象是服务端。
两大核心类型(七层 / 四层)
表格
| 代理类型 | 基于协议 | 解析能力 | 核心应用场景 |
|---|---|---|---|
| 七层代理 | HTTP/HTTPS | 解析 URL、Header、Cookie 等应用层内容 | 网站负载均衡、动静分离、SSL 终端、灰度发布 |
| 四层代理 | TCP/UDP | 不解析应用层,仅转发原始数据流 | 数据库代理、SSH 跳板机、游戏服务器 UDP 转发、MQTT 服务高可用 |
2. Nginx 七层反向代理(HTTP/HTTPS)配置(最常用)
A(nginx 192.168.10.101) B(http 192.168.10.102)
1.在192.168.10.102(http)上做:
systemctl stop firewalld
dnf -y install httpd
echo "hello" > /var/www/html/index.html
systemctl start httpd
2.在192.168.10.101(nginx)上做:
vi /usr/local/nginx/conf/nginx.conf
http {
# 后端服务集群(负载均衡)
upstream backend_server {
server 192.168.10.102:80;
}
server {
listen 80;
location / {
proxy_pass http://backend_server; # 转发到后端集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
}
}
}
3.验证结果
curl 192.168.10.101
3. Nginx 四层反向代理(TCP/UDP)配置
适用于 MySQL、Redis、SSH 等非 HTTP 服务的代理:
# 四层TCP反向代理(需加载stream模块)
stream {
upstream mysql_server {
server 192.168.1.10:3306;
server 192.168.1.11:3306;
}
server {
listen 3306; # 代理监听端口
proxy_pass mysql_server; # 转发到后端MySQL
}
}
补充核心知识点
- 七层代理需配置
http{}模块下的upstream定义后端服务池,通过proxy_pass实现请求转发; - 四层代理需启用
stream{}模块(与http{}平级,不可嵌套),核心用于非 HTTP 协议的服务代理; - 反向代理可通过
proxy_set_header X-Real-IP $remote_addr将客户端真实 IP 传递给后端服务器,解决后端无法获取真实 IP 的问题; - 动静分离是七层代理的典型应用:Nginx 直接响应静态资源(图片、CSS、JS),动态请求(PHP、API)转发至 Tomcat/Apache,大幅提升服务响应速度。
三、正向代理 vs 反向代理 核心区别
表格
| 维度 | 正向代理 | 反向代理 |
|---|---|---|
| 代理对象 | 客户端 | 服务端 |
| 服务端感知 | 不知真实客户端 | 不知真实客户端 |
| 客户端感知 | 知代理服务器 | 不知真实服务端 |
| 部署位置 | 客户端侧 / 内网出口 | 服务端侧 / 公网入口 |
| 核心作用 | 客户端访问外网 | 服务端负载均衡、隐藏 |
四、缓存机制:服务性能的 "加速器"
核心定义
Nginx 缓存主要基于反向代理缓存(Proxy Cache) ,Nginx 作为反向代理时,将后端服务的静态资源(图片、JS、CSS、HTML) 缓存到本地磁盘,后续客户端请求直接返回缓存,核心作用是降低后端服务器负载、提升客户端响应速度。
缓存核心工作流程
- 客户端首次请求:Nginx 无缓存,转发请求至后端→后端返回内容→Nginx 缓存内容并返回给客户端;
- 客户端再次请求:Nginx 命中缓存,直接返回本地内容,不与后端交互。
Nginx 缓存代理完整配置
因代理缓存功能需在反向代理模式下缓存后端服务器(如apache)的响应内容。需要先配置七层反向代理
1.反向代理配置
vi /usr/local/nginx/conf/nginx.conf
http {
# 后端服务集群(负载均衡)
upstream backend_server {
server 192.168.10.102:80;
}
server {
listen 80;
location / {
proxy_pass http://backend_server; # 转发到后端集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
}
}
}
nginx -t #测试
nginx -s reload #重载
2.设置缓存功能
mkdir -p /data/nginx/cache #创建缓存目录
chown -R nginx:nginx /data/nginx/cache #修改权限
vi /usr/local/nginx/conf/nginx.conf
http {
#定义缓存路径和参数
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m
inactive=60m max_size=1g use_temp_path=off;
server {
listen 80;
location / {
proxy_pass http://backend;
#启用缓存区
proxy_cache my_cache;
#定义缓存键(URL +语求方法+协议)
proxy_cache_key "$scheme$request_method$Host$request_uri";
#缓存有效期(不同状态码不同时间)
proxy_cache_valid 200 302 10m; #200/302状态码缓存10分钟
proxy_cache_valid 404 1m; #404缓存1分钟
proxy_cache_valid any 5s; #其他状态码缓存5秒
#添加缓存状态头(调试用)
add_header X-Cache-Status $upstream_cache_status;
}
}
}
3.验证
curl -I 192.168.10.101
关键配置解析:
proxy_cache_path :定义缓存文件的存储路径
levels=1:2 :定义缓存目录的层级结构,levels=N:M,表示缓存文件路径的层级深度
keys_zone=my_cache:10m :定义共享内存区域,用于缓存键(key)和元数据(如过期时间),10m:共享内存区大小(通常每1MB可存储约8000个键)
inactive=60m : 定义缓存内容的闲置有效期。60分钟内未被访问,将自动删除
max_size=1g :定义缓存目录的最大磁盘空间。当缓存量达到1GB时,nginx启动LRU(最近最少使用)算法清理旧缓存
use_temp_path=off :控制临时文件的存储位置
3. 缓存核心参数说明
proxy_cache_path:定义缓存存储路径,必须全局配置proxy_cache_valid:指定不同状态码的缓存时间X-Cache-Status:响应头标识缓存状态(HIT = 命中,MISS = 未命中)- 不缓存动态接口:可通过
proxy_cache off;关闭指定路径缓存
补充核心知识点
- Nginx 缓存支持多类型:除代理缓存外,还有 FastCGI 缓存(缓存 PHP 动态内容)、静态资源浏览器缓存(通过
expires指令设置,非服务端缓存); - 核心配置
proxy_cache_path:指定缓存存储路径、共享内存大小、缓存有效期、最大磁盘占用,其中inactive表示缓存闲置超时时间,超时未访问将被自动清理; - 可通过
add_header X-Cache-Status $upstream_cache_status添加响应头,快速验证缓存状态(HIT = 命中、MISS = 未命中); - 缓存清理:Nginx 无内置缓存清理命令,可通过删除缓存目录文件 或使用第三方模块
ngx_cache_purge实现精准清理。
五、Rewrite 与正则:URL 的 "规则引擎"
核心定义
Rewrite 是 Nginx 的 URL 重写模块,结合正则表达式 实现 URL 的匹配、重写和跳转,让请求流转摆脱物理路径限制,灵活适配业务需求,常与location指令配合使用。
核心应用场景
- 路径美化:将
/product/123转换为/index.php?id=123,提升 URL 可读性; - 链接迁移:将过期 URL 通过 301 永久重定向跳转到新地址,保证 SEO 权重;
- 协议 / 域名统一:强制将 HTTP 请求跳转为 HTTPS,或统一 www / 非 www 域名;
- 动态路由:适配单页应用(SPA)、RESTful API 的路由规则。
补充核心知识点
1. 正则表达式核心元字符(常用)
^:匹配 URL 开头,$:匹配 URL 结尾;\d:匹配纯数字,.*:匹配任意字符零次或多次;+:匹配前面字符一次或多次,?:匹配前面字符零次或一次;():捕获组,捕获的内容可通过$1、$2引用。
2. location 匹配优先级(从高到低)
精确匹配(=) > 精确前缀匹配(^~) > 正则匹配(~/*,文件中靠前的优先) > 普通前缀匹配 > 通用匹配(/)
3. Rewrite 四大 flag 标记(核心)
last:重写后重新匹配 location,默认使用;break:重写后不重新匹配,直接在当前 location 处理;redirect:302 临时重定向,浏览器地址栏变化,爬虫不更新 URL;permanent:301 永久重定向,浏览器地址栏变化,爬虫更新 URL(推荐链接迁移使用)。
4. 实用指令
set:自定义变量,如set $name Nginx,后续可通过$name引用;if:结合全局变量做条件判断,如if ($scheme = http),实现强制 HTTPS 跳转。
六、Nginx 核心延伸能力(基础功能拓展)
- 负载均衡 :基于反向代理的
upstream模块实现,支持轮询(默认)、权重(weight)、IP 哈希(ip_hash)、最少连接(least_conn)等策略,解决单服务器性能瓶颈,实现服务高可用; - SSL 终端:由 Nginx 统一处理 HTTPS 的加密 / 解密,后端服务器仅处理明文请求,降低后端计算压力;
- 高并发支持 :采用事件驱动模型 和非阻塞 IO,能同时处理数万级并发连接,资源占用远低于 Apache;
- 健康检查 :可通过第三方模块(如
ngx_http_upstream_check_module)实现后端服务健康检查,自动剔除故障节点,保证服务稳定性。
七、核心总结
Nginx 的四大核心功能形成了一套完整的 Web 服务优化体系:正向代理 解决客户端网络访问管控与匿名需求,反向代理 实现服务端的调度、隔离与高可用,缓存机制 大幅提升服务响应性能,Rewrite 与正则让 URL 管理更灵活。
同时,基于核心功能延伸的负载均衡、动静分离、SSL 终端等能力,让 Nginx 成为从小型网站到大型微服务架构的通用解决方案,是构建高效、稳定、安全的 Web 架构的必备工具。