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 服务架构,满足企业级应用的负载均衡、安全防护、性能优化等核心需求。

相关推荐
Arvin62712 小时前
Nginx 添加账号密码访问验证
运维·服务器·nginx
阿凤2115 小时前
nginx部署如何配置ssl证书
运维·nginx·ssl
zhyoobo16 小时前
Nginx Gzip压缩全解析:原理、配置与性能优化指南
运维·nginx·性能优化
chxii17 小时前
Nginx的缓存配置--客户端缓存 (Browser Caching)和代理服务器缓存 (Proxy Server Caching)
nginx·缓存
MonkeyKing_sunyuhua19 小时前
Nginx + Let’s Encrypt 免费 SSL 证书 的完整配置过程
运维·nginx·ssl
sibylyue20 小时前
Nginx\Tomcat\Jetty\Netty
java·nginx·http
cyber_两只龙宝21 小时前
【Nginx】Nginx反向代理之实现http的反向代理
linux·运维·nginx·http·云原生·反向代理
難釋懷21 小时前
Nginx本地缓存API
nginx·spring·缓存
難釋懷1 天前
Nginx本地缓存
nginx·spring·缓存
chxii2 天前
linux 下用 acme.sh 搞定 Nginx 免费 SSL 证书自动续期(上)
nginx