Nginx 代理与缓存实战:正向、反向及网络层级详解

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

核心应用场景

  1. 内网访问管控:限制企业员工访问非工作类网站(如社交、视频平台);
  2. 网络匿名访问:隐藏客户端真实 IP,提升访问安全性;
  3. 资源缓存加速:缓存外网公共资源(如软件安装包、镜像文件),减少企业外网带宽消耗。

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 请求内容

补充核心知识点

  1. Nginx 默认不支持 HTTPS 正向代理,需通过ngx_http_proxy_connect_module第三方模块实现,编译安装时需手动添加;
  2. 正向代理配置核心是指定DNS 解析服务器 (如 8.8.8.8、1.1.1.1)和允许代理的端口(通常为 80/443);
  3. 验证方式支持多端: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
    }
}

补充核心知识点

  1. 七层代理需配置http{}模块下的upstream定义后端服务池,通过proxy_pass实现请求转发;
  2. 四层代理需启用stream{}模块(与http{}平级,不可嵌套),核心用于非 HTTP 协议的服务代理;
  3. 反向代理可通过proxy_set_header X-Real-IP $remote_addr将客户端真实 IP 传递给后端服务器,解决后端无法获取真实 IP 的问题;
  4. 动静分离是七层代理的典型应用:Nginx 直接响应静态资源(图片、CSS、JS),动态请求(PHP、API)转发至 Tomcat/Apache,大幅提升服务响应速度。

三、正向代理 vs 反向代理 核心区别

表格

维度 正向代理 反向代理
代理对象 客户端 服务端
服务端感知 不知真实客户端 不知真实客户端
客户端感知 知代理服务器 不知真实服务端
部署位置 客户端侧 / 内网出口 服务端侧 / 公网入口
核心作用 客户端访问外网 服务端负载均衡、隐藏

四、缓存机制:服务性能的 "加速器"

核心定义

Nginx 缓存主要基于反向代理缓存(Proxy Cache) ,Nginx 作为反向代理时,将后端服务的静态资源(图片、JS、CSS、HTML) 缓存到本地磁盘,后续客户端请求直接返回缓存,核心作用是降低后端服务器负载、提升客户端响应速度

缓存核心工作流程

  1. 客户端首次请求:Nginx 无缓存,转发请求至后端→后端返回内容→Nginx 缓存内容并返回给客户端;
  2. 客户端再次请求: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;关闭指定路径缓存

补充核心知识点

  1. Nginx 缓存支持多类型:除代理缓存外,还有 FastCGI 缓存(缓存 PHP 动态内容)、静态资源浏览器缓存(通过expires指令设置,非服务端缓存);
  2. 核心配置proxy_cache_path:指定缓存存储路径、共享内存大小、缓存有效期、最大磁盘占用,其中inactive表示缓存闲置超时时间,超时未访问将被自动清理;
  3. 可通过add_header X-Cache-Status $upstream_cache_status添加响应头,快速验证缓存状态(HIT = 命中、MISS = 未命中);
  4. 缓存清理:Nginx 无内置缓存清理命令,可通过删除缓存目录文件 或使用第三方模块ngx_cache_purge实现精准清理。

五、Rewrite 与正则:URL 的 "规则引擎"

核心定义

Rewrite 是 Nginx 的 URL 重写模块,结合正则表达式 实现 URL 的匹配、重写和跳转,让请求流转摆脱物理路径限制,灵活适配业务需求,常与location指令配合使用。

核心应用场景

  1. 路径美化:将/product/123转换为/index.php?id=123,提升 URL 可读性;
  2. 链接迁移:将过期 URL 通过 301 永久重定向跳转到新地址,保证 SEO 权重;
  3. 协议 / 域名统一:强制将 HTTP 请求跳转为 HTTPS,或统一 www / 非 www 域名;
  4. 动态路由:适配单页应用(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 核心延伸能力(基础功能拓展)

  1. 负载均衡 :基于反向代理的upstream模块实现,支持轮询(默认)、权重(weight)、IP 哈希(ip_hash)、最少连接(least_conn)等策略,解决单服务器性能瓶颈,实现服务高可用;
  2. SSL 终端:由 Nginx 统一处理 HTTPS 的加密 / 解密,后端服务器仅处理明文请求,降低后端计算压力;
  3. 高并发支持 :采用事件驱动模型非阻塞 IO,能同时处理数万级并发连接,资源占用远低于 Apache;
  4. 健康检查 :可通过第三方模块(如ngx_http_upstream_check_module)实现后端服务健康检查,自动剔除故障节点,保证服务稳定性。

七、核心总结

Nginx 的四大核心功能形成了一套完整的 Web 服务优化体系:正向代理 解决客户端网络访问管控与匿名需求,反向代理 实现服务端的调度、隔离与高可用,缓存机制 大幅提升服务响应性能,Rewrite 与正则让 URL 管理更灵活。

同时,基于核心功能延伸的负载均衡、动静分离、SSL 终端等能力,让 Nginx 成为从小型网站到大型微服务架构的通用解决方案,是构建高效、稳定、安全的 Web 架构的必备工具。

相关推荐
5G行业应用2 小时前
6G未来网络架构ATHENA愿景——《2026韩国SK电讯6G白皮书》
网络·架构
一去不复返的通信er2 小时前
5G系统级仿真
网络·5g
百结2143 小时前
Nginx核心功能
运维·nginx
y = xⁿ4 小时前
【从零开始学习Redis|第七篇】Redis 进阶原理篇:消息队列、分布式锁、缓存击穿与事务实现
java·redis·学习·缓存
cheems95274 小时前
[网络原理]http协议理论基础以及wireshark抓包分析(一)
网络·http·wireshark
繁华如雪亦如歌4 小时前
Linux:Cache
缓存
阿杰真不会敲代码5 小时前
缓存一致性,缓存穿透,缓存雪崩,缓存击穿
缓存
Oliver_LaVine6 小时前
Windows11使用VMware Workstation Pro 安装macOS Sonoma 14.4系统
网络
条tiao条6 小时前
从 “猜数字游戏” 入门 BST:C 语言从零实现与核心操作
c语言·网络·游戏