Nginx 作为高性能开源 Web 服务器和反向代理工具,凭借轻量级、高并发、模块化设计的优势,成为现代 Web 架构的核心组件。本文基于实战角度,拆解 Nginx 的正向代理、反向代理(七层 / 四层)、缓存机制及 Rewrite 正则配置四大核心功能,附核心配置与验证步骤,快速上手 Nginx 核心用法。
一、正向代理:客户端的 "中间人"
正向代理位于客户端与目标服务器之间,替客户端转发请求并隐藏真实 IP,适用于内网访问控制、匿名访问、资源缓存加速等场景。Nginx 默认不支持 HTTPS 正向代理,需引入第三方模块ngx_http_proxy_connect_module实现。
核心配置步骤
- 编译安装 :编译时添加第三方模块及必要依赖,指定运行用户和核心功能模块(
--with-http_ssl_module、--with-stream等); - 核心配置:监听指定端口,配置 DNS 解析、允许 CONNECT 方法及端口,动态转发 HTTP/HTTPS 请求;
nginx
server {
listen 8080;
server_name proxy.example.com;
resolver 8.8.8.8 1.1.1.1;
proxy_connect;
proxy_connect_allow 443 80;
location / {
proxy_pass $scheme://$http_host$request_uri;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
- 验证 :Windows 可通过浏览器配置代理 IP + 端口,Linux 使用
curl -x 代理地址 目标地址测试,查看 Nginx 日志确认代理生效。
二、反向代理:服务端的 "智能调度器"
反向代理代理的是后端应用服务器,对客户端隐藏真实服务地址,分为七层(应用层,HTTP/HTTPS)和四层(网络层,TCP/UDP),是负载均衡、动静分离、SSL 终端、灰度发布的核心实现方式。
1. 七层反向代理(HTTP/HTTPS)
基于 HTTP 协议解析 URL、Header 等内容,转发请求至后端 Web 服务(如 Httpd、Tomcat),可实现动静分离和真实 IP 透传。核心配置:
nginx
http {
upstream backend { # 定义后端服务池
server 192.168.10.102:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 透传客户端真实IP
}
}
}
验证 :curl 代理服务器IP,可返回后端服务的响应内容,实现请求转发。
2. 四层反向代理(TCP/UDP)
基于 TCP/UDP 协议直接转发数据流,不解析应用层内容,适用于数据库代理、SSH 跳板机、游戏服务器代理等场景,stream 模块需与 http 模块平级 。SSH 代理核心配置:
nginx
stream {
upstream ssh_cluster {
server 192.168.10.102:22;
}
server {
listen 2222;
proxy_pass ssh_cluster;
proxy_connect_timeout 5s;
}
}
验证 :ssh 代理服务器IP -p2222,可直接登录后端 SSH 服务器。
三、缓存机制:降低后端负载,提升响应速度
Nginx 缓存主要基于反向代理缓存(Proxy Cache),缓存后端服务器的响应内容,当客户端重复请求时,直接从 Nginx 缓存返回,无需访问后端,核心用于加速内容响应。
核心配置与原理
- 缓存原理:客户端首次请求缓存未命中,Nginx 向后端请求并缓存数据;后续请求缓存命中,直接返回缓存内容;
- 核心配置:先配置七层反向代理,再定义缓存路径和规则;
nginx
http {
# 定义缓存参数
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g use_temp_path=off;
upstream backend {
server 192.168.10.102:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_cache my_cache; # 启用缓存
proxy_cache_key "$scheme$request_method$host$request_uri"; # 缓存键
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status; # 缓存状态头(调试用)
}
}
}
- 验证 :
curl -I 代理服务器IP,首次返回X-Cache-Status: MISS(未命中),再次请求返回X-Cache-Status: HIT(命中),说明缓存生效。
四、Rewrite 与正则:URL 的 "规则引擎"
Rewrite 模块结合正则表达式,实现 URL 重写、重定向,适用于路径美化、旧链接迁移、强制 HTTPS、动态路由等场景,常与location配合使用,实现精细的路径控制。
1. 核心基础:正则表达式与 location
- 常用正则元字符 :
^(起始)、$(结束)、*(零次 / 多次)、+(一次 / 多次)、\d(纯数字)、()(捕获组)等; - location 匹配优先级 :精确匹配
=> 精确前缀匹配^~> 正则匹配~/~*> 普通前缀匹配 > 通用匹配/。
2. Rewrite 核心用法
语法 :rewrite <regex> <replacement> [flag];flag 标记:
last:重写后重新匹配 location;break:重写后不匹配后续 location;redirect:302 临时重定向;permanent:301 永久重定向(推荐旧链接迁移使用)。
3. 实战案例
- 捕获组重写:提取 URL 参数并重新路由
nginx
location /category/ {
rewrite /category/(.+)/(\d+)$ /archive/$1/$2 last;
}
location /archive/ {
return 200 "Category:$1,ID:$2";
}
- 强制 HTTPS:将 HTTP 请求重定向至 HTTPS
nginx
server {
listen 80;
server_name example.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
- 自定义变量 :通过
set指令定义变量,灵活处理请求
nginx
location /demo {
set $name "Nginx";
return 200 "Hello, $name!";
}
五、总结
Nginx 的四大核心功能各有侧重:正向代理 聚焦客户端访问管控,** 反向代理(七层 / 四层)** 实现服务端流量调度,缓存机制 提升响应性能并降低后端负载,Rewrite 与正则实现 URL 灵活管控。掌握这些功能的配置与实战,能够快速构建高效、稳定、可扩展的 Web 服务架构,满足企业级应用的负载均衡、安全防护、性能优化等核心需求。