一、正向代理
正向代理是位于客户端与目标服务器之间的代理服务,代表客户端发起请求,隐藏真实 IP,核心用于内网管控、匿名访问和资源缓存加速。
- 部署前提 :编译安装 Nginx 时需添加第三方模块
ngx_http_proxy_connect_module(默认不支持 HTTPS 转发),核心编译参数包括--with-stream(支持 TCP 代理)、--with-http_ssl_module(支持 HTTPS)等。 - 核心配置 :在
nginx.conf中配置监听端口(如 8080)、DNS resolver(如 8.8.8.8)、允许代理的端口(443/80),通过proxy_pass动态转发 HTTP/HTTPS 请求。 - 验证方式 :Windows 端通过浏览器手动设置代理 IP 和端口;Linux 端使用
curl -x 代理地址:端口 目标URL测试,可通过 Nginx 访问日志确认代理生效。
二、反向代理(七层 + 四层)
反向代理是位于客户端与后端服务器之间的代理服务,客户端仅访问代理服务器,由代理分发请求至后端,核心用于负载均衡、动静分离、SSL 终端等场景,分为七层和四层两种模式:
表格
| 代理模式 | 基于协议 | 核心特点 | 应用场景 |
|---|---|---|---|
| 七层代理 | HTTP/HTTPS | 解析应用层内容(URL/Header),精准转发 | Web 服务负载均衡、动静分离、灰度发布 |
| 四层代理 | TCP/UDP | 转发原始数据流,不解析应用层,低延迟 | 数据库代理、SSH 跳板机、游戏服务器负载均衡 |
- 七层代理配置 :
- 用
upstream定义后端服务器地址池(如backend); - 在
server块中通过proxy_pass http://地址池名转发请求,配合proxy_set_header传递真实 IP 和 Host 信息。
- 用
- 四层代理配置 :
- 需在
nginx.conf中添加与http模块平级的stream模块; - 用
upstream定义 TCP/UDP 服务地址池(如 SSH 的 22 端口),通过listen指定代理端口(如 2222),proxy_pass转发至地址池。
- 需在
- 验证方式 :访问 Nginx 代理 IP,若返回后端服务器内容(如 HTTPD 页面)则七层代理生效;通过
ssh -p 代理端口 代理IP登录,实际进入后端服务器则四层代理生效。
三、缓存机制(Proxy Cache)
Nginx 缓存基于反向代理,缓存后端服务器响应内容,再次请求时直接返回缓存数据,降低后端负载、提升响应速度。
- 核心原理:客户端首次请求→Nginx 无缓存→转发至后端并缓存→返回数据;客户端二次请求→Nginx 命中缓存→直接返回缓存数据,无需访问后端。
- 核心配置 :
- 用
proxy_cache_path定义缓存目录(如/data/nginx/cache)、层级结构(levels=1:2)、共享内存区(keys_zone=my_cache:10m)、闲置有效期(inactive=60m)和最大磁盘空间(max_size=1g); - 在
location块中启用缓存(proxy_cache my_cache),定义缓存键(proxy_cache_key "$scheme$request_method$host$request_uri"),按状态码设置缓存有效期(如 200 状态码缓存 10 分钟)。
- 用
- 验证方式 :通过
curl -I 代理IP查看响应头X-Cache-Status,MISS表示未命中,HIT表示命中;可查看缓存目录确认文件生成。
四、Rewrite 与正则表达式
Rewrite 是 Nginx 的 "规则引擎",结合正则表达式实现 URL 重写、跳转,核心用于路径美化、旧链接迁移、强制 HTTPS 等场景,需配合location使用。
- 基础:正则表达式元字符 :常用元字符包括
^(起始位置)、$(结束位置)、*(零次或多次匹配)、+(一次或多次匹配)、\d(纯数字)、[a-z](小写字母)等。 - 核心:location 匹配 :用于匹配请求 URI,优先级决定处理逻辑:
- 匹配模式:精确匹配(
=,优先级最高)→精确前缀匹配(^~)→正则匹配(~区分大小写 /~*不区分,按配置顺序)→普通前缀匹配→通用匹配(/,优先级最低); - 应用:可通过
location分离静态资源(如~ \.(jpg|png)$)和动态请求,单独配置处理逻辑。
- 匹配模式:精确匹配(
- Rewrite 语法与 flag :
- 语法:
rewrite <正则> <目标URL> [flag]; - flag 类型:
last(重写后重新匹配 location)、break(重写后不重新匹配)、redirect(302 临时跳转)、permanent(301 永久跳转); - 高级用法:通过捕获组(
())提取 URL 中的参数(如/category/(.+)/(\d+)),用$1/$2引用,实现动态路由;通过set指令定义变量,灵活适配复杂逻辑。
- 语法:
五、本章核心总结
- Nginx 核心功能围绕 "代理" 展开,正向代理面向客户端,反向代理面向后端服务器,四层代理侧重传输层转发,七层代理侧重应用层解析;
- 缓存机制需依赖反向代理,通过
proxy_cache_path和proxy_cache配置,按状态码和有效期精准控制缓存,是提升 Web 性能的关键; - Rewrite 与正则表达式是 URL 管控的核心,需掌握
location优先级和 Rewrite flag 的区别,结合捕获组和变量可实现复杂业务场景(如灰度发布、路径美化); - 所有功能配置后需通过
nginx -t验证语法,nginx -s reload重载生效,实操中需结合日志排查问题,确保代理、缓存、重写功能正常运行。