Nginx核心功能

Nginx 作为高性能开源 Web 服务器和反向代理工具,凭借轻量级、高并发、模块化设计的优势,成为现代 Web 架构的核心组件。本文基于实战角度,拆解 Nginx 的正向代理、反向代理(七层 / 四层)、缓存机制及 Rewrite 正则配置四大核心功能,附核心配置与验证步骤,快速上手 Nginx 核心用法。

一、正向代理:客户端的 "中间人"

正向代理位于客户端与目标服务器之间,替客户端转发请求并隐藏真实 IP,适用于内网访问控制、匿名访问、资源缓存加速等场景。Nginx 默认不支持 HTTPS 正向代理,需引入第三方模块ngx_http_proxy_connect_module实现。

核心配置步骤

  1. 编译安装 :编译时添加第三方模块及必要依赖,指定运行用户和核心功能模块(--with-http_ssl_module--with-stream等);
  2. 核心配置:监听指定端口,配置 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 "";
    }
}
  1. 验证 :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 缓存返回,无需访问后端,核心用于加速内容响应。

核心配置与原理

  1. 缓存原理:客户端首次请求缓存未命中,Nginx 向后端请求并缓存数据;后续请求缓存命中,直接返回缓存内容;
  2. 核心配置:先配置七层反向代理,再定义缓存路径和规则;

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; # 缓存状态头(调试用)
        }
    }
}
  1. 验证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 服务架构,满足企业级应用的负载均衡、安全防护、性能优化等核心需求。

相关推荐
kiku18183 小时前
Nginx安全
nginx·web安全·https
卢傢蕊6 小时前
Nginx安全防护与HTTPS部署实战
nginx·安全·https
岁岁种桃花儿6 小时前
kubenetes从入门到上天系列第十九篇:Kubernetes安装Nginx ingress controller
java·nginx·kubernetes
kc胡聪聪7 小时前
nginx安全
nginx
高梦轩9 小时前
Nginx 安全防护与 HTTPS 部署实战文档
nginx·安全·https
shuxiaohua9 小时前
一次现网问题定位-nginx报错upstream sent invalid chunked response while reading upstream
运维·nginx
|华|12 小时前
Nginx安全防护与HTTPS部署
nginx·安全
小尔¥12 小时前
Nginx安全
运维·nginx·安全
buhuimaren_12 小时前
LAMP架构部署配置
nginx·php