Nginx 四大核心功能实战:正向代理 + 反向代理 + 缓存 + Rewrite 正则

前言

Nginx 作为高性能开源 Web 服务器和反向代理工具,凭借轻量级架构、高并发处理能力和灵活的模块化设计,成为现代 Web 架构的核心组件。从全球顶尖网站到微服务架构,Nginx 在负载均衡、缓存加速、安全防护、流量调度等场景中发挥着不可替代的作用。

本文将聚焦 Nginx 的四大核心功能 ------正向代理反向代理(七层 / 四层)缓存机制Rewrite 与正则表达式 ,通过理论解析 + 实操步骤的形式,手把手教你掌握 Nginx 核心配置技巧,实现从基础安装到高级配置的全流程落地,为构建高效、稳定的 Web 服务奠定基础。

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

1.1 正向代理核心概念

正向代理(Forward Proxy)是位于客户端和原始服务器之间的代理服务器,核心作用是转发客户端请求至目标服务器,并将响应结果返回给客户端。Nginx 正向代理可隐藏客户端真实 IP,是企业内网管控、匿名访问、资源缓存加速的核心工具。

典型应用场景

  • 内网访问控制:限制员工访问社交媒体、非工作类网站;
  • 匿名访问:通过代理服务器隐藏用户真实 IP 地址;
  • 资源缓存加速:缓存软件包、镜像文件等公共资源,降低外网带宽消耗。

正向代理访问流程:浏览器 / 客户端 → 代理服务器 → 目标服务器,代理服务器作为客户端的 "代言人" 完成请求转发。

1.2 Nginx 编译安装(含正向代理 HTTPS 支持)

Nginx 默认不支持 HTTPS 正向代理,需编译安装并添加第三方模块ngx_http_proxy_connect_module,以下为OpenEuler/CentOS环境下的完整安装步骤。

1.2.1 安装依赖软件包
复制代码
[root@localhost ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar
1.2.2 创建运行用户、组及日志目录

为 Nginx 创建独立运行用户,降低安全风险,同时创建日志目录并授权:

复制代码
[root@localhost ~]# useradd -M -s /sbin/nologin nginx  # 不创建宿主目录、禁止Shell登录
[root@localhost ~]# mkdir -p /var/log/nginx
[root@localhost ~]# chown -R nginx:nginx /var/log/nginx
1.2.3 编译安装 Nginx(添加 HTTPS 代理模块)

解压 Nginx 源码包,配置编译选项(启用核心模块 + 第三方 HTTPS 代理模块),执行编译安装:

复制代码
# 解压源码包
[root@localhost ~]# tar zxf nginx-1.26.3_http_proxy.tar.gz
[root@localhost ~]# cd nginx-1.26.3
# 配置编译选项(关键:添加ngx_http_proxy_connect_module模块)
[root@localhost nginx-1.26.3]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-http_ssl_module --with-http_v2_module --with-http_realip_module \
--with-http_stub_status_module --with-http_gzip_static_module --with-pcre \
--with-stream --with-stream_ssl_module --with-stream_realip_module \
--add-module=./ngx_http_proxy_connect_module
# 编译并安装
[root@localhost nginx-1.26.3]# make && make install

核心编译参数说明

表格

参数 功能说明
--prefix=/usr/local/nginx 指定 Nginx 安装目录
--user/--group=nginx 指定运行用户 / 组
--with-http_ssl_module 支持 HTTPS 协议
--with-http_realip_module 支持 IP 透传
--with-stream 支持四层 TCP/UDP 代理
--add-module=xxx 加载第三方 HTTPS 正向代理模块
1.2.4 创建软链接 + 添加系统服务

创建软链接实现nginx命令全局调用,编写 systemd 服务文件实现 Nginx 开机自启、便捷管理:

复制代码
# 创建软链接
[root@localhost nginx-1.26.3]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
# 编写系统服务文件
[root@localhost ~]# vi /lib/systemd/system/nginx.service

服务文件内容如下:

ini

复制代码
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/sbin/nginx -t
ExecStart=/usr/local/sbin/nginx
ExecReload=/usr/local/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
User=root
Group=root
[Install]
WantedBy=multi-user.target

重新加载服务配置并启动 Nginx:

复制代码
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable nginx --now
[root@localhost ~]# systemctl status nginx  # 验证启动状态

1.3 正向代理核心配置

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加正向代理配置,支持 HTTP/HTTPS 请求转发:

nginx

复制代码
server {
    listen 8080;  # 代理监听端口
    server_name proxy.example.com;  # 代理服务器域名

    # 配置DNS解析器,多个DNS用空格分隔
    resolver 8.8.8.8 1.1.1.1;
    # 启用CONNECT方法,支持HTTPS代理
    proxy_connect;
    proxy_connect_allow 443 80;  # 允许代理的端口
    proxy_connect_connect_timeout 10s;
    proxy_connect_read_timeout 10s;
    proxy_connect_send_timeout 10s;

    # 处理所有HTTP/HTTPS请求
    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;  # 启用HTTP/1.1长连接
        proxy_set_header Connection "";
    }
}

配置完成后,检查配置文件语法并重载 Nginx:

复制代码
[root@localhost ~]# nginx -t  # 语法检查
[root@localhost ~]# nginx -s reload  # 重载配置

1.4 正向代理验证

1.4.1 Windows 客户端验证(火狐浏览器)
  1. 打开火狐浏览器 → 设置 → 网络设置 → 选择手动配置代理
  2. 配置 HTTP/HTTPS 代理为 Nginx 服务器 IP + 端口:192.168.10.101:8080,勾选也将此代理用于 HTTPS
  3. 访问任意网站,可通过 Nginx 访问日志/var/log/nginx/access.log查看请求记录,验证代理生效。
1.4.2 Linux 客户端验证(curl 命令)

使用curl -x参数指定代理服务器,访问目标网站验证:

复制代码
[root@localhost ~]# curl -x http://192.168.10.101:8080 www.baidu.com

若正常返回百度页面源码,说明正向代理配置成功,客户端真实 IP 已被代理服务器隐藏。

二、反向代理:服务端的 "智能调度器"

反向代理(Reverse Proxy)是位于服务端前端 的代理服务器,客户端仅需访问代理服务器,由代理服务器将请求分发至后端应用服务器。Nginx 反向代理分为七层(应用层)四层(网络层),是实现负载均衡、动静分离、安全隔离的核心手段。

核心特点 :后端应用服务器对客户端隐藏,代理服务器代理的对象是服务端典型应用场景:负载均衡、动静分离、SSL 终端、灰度发布、数据库代理、SSH 跳板机等。

2.1 七层反向代理(HTTP/HTTPS 协议)

七层反向代理基于HTTP/HTTPS 协议,可深度解析 URL、Header、Cookie 等应用层内容,实现精准的请求分发,是 Web 服务最常用的代理方式。

2.1.1 实验环境准备

本次实验需两台主机,配置如下:

表格

操作系统 配置 服务器 IP 运行服务
OpenEuler 2C4G 192.168.10.101 Nginx(反向代理)
OpenEuler 2C4G 192.168.10.102 Httpd(后端应用)
2.1.2 后端 Httpd 服务部署(192.168.10.102)
复制代码
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
# 安装Httpd并启动
[root@localhost ~]# dnf install httpd -y
[root@localhost ~]# echo "这是后端主机 192.168.10.102" > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd && systemctl enable httpd
2.1.3 Nginx 七层反向代理配置(192.168.10.101)

编辑 Nginx 主配置文件,通过upstream定义后端服务器地址池,proxy_pass实现请求转发:

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;  # 传递客户端请求的Host头
            proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实IP
        }
    }
}

检查配置并重载 Nginx:

复制代码
[root@localhost ~]# nginx -t && nginx -s reload
2.1.4 验证七层反向代理

在 Nginx 服务器或任意客户端执行 curl 命令,访问 Nginx 服务器 IP,验证请求转发至后端

复制代码
[root@localhost ~]# curl 192.168.10.101
这是后端主机 192.168.10.102

返回后端 Httpd 的页面内容,说明七层反向代理配置成功。

2.2 四层反向代理(TCP/UDP 协议)

四层反向代理基于TCP/UDP 协议,不解析应用层内容,直接转发原始数据流,具有高性能、低延迟的特点,适用于数据库、SSH、游戏服务器等非 HTTP 服务。

2.2.1 Nginx 四层反向代理配置(SSH 代理示例)

四层代理需通过stream模块实现,stream 模块需与 http 模块平级,不能嵌套在 http 模块内。配置实现通过 Nginx 的 2222 端口代理至后端 192.168.10.102 的 22 端口(SSH):

nginx

复制代码
# stream模块与http平级
stream {
    # 定义后端SSH服务器地址池
    upstream ssh_cluster {
        server 192.168.10.102:22;
    }

    # 监听2222端口,转发SSH请求
    server {
        listen 2222;
        proxy_pass ssh_cluster;
        proxy_connect_timeout 5s;  # 连接超时时间
        proxy_timeout 1h;  # 长连接保持时间
    }
}

# 原有http模块配置不变
http {
    ...
}

检查配置并重载 Nginx:

复制代码
[root@localhost ~]# nginx -t && nginx -s reload
# 验证2222端口监听状态
[root@localhost ~]# ss -nlpt | grep 2222
2.2.2 验证四层反向代理

通过 SSH 连接 Nginx 服务器的 2222 端口,验证是否成功登录后端 192.168.10.102 服务器:

复制代码
[root@localhost ~]# ssh root@192.168.10.101 -p2222
# 登录后查看服务器IP,验证是否为后端主机
[root@localhost ~]# ifconfig

若显示 IP 为192.168.10.102,说明四层 SSH 代理配置成功,可实现通过 Nginx 作为跳板机安全访问内网服务器。

2.3 反向代理核心应用场景

表格

代理类型 应用场景 核心价值
七层反向代理 负载均衡、动静分离、SSL 终端、灰度发布 解析应用层内容,精准调度,降低后端服务压力
四层反向代理 数据库代理(MySQL/Redis)、SSH 跳板机、游戏服务器、MQTT 服务 高性能低延迟,适配非 HTTP 服务,实现端口映射与安全隔离

三、Nginx 缓存:提升响应速度,降低后端负载

Nginx 缓存功能主要基于反向代理缓存(Proxy Cache),核心作用是缓存后端服务器的响应内容,当客户端再次请求相同资源时,Nginx 直接返回缓存内容,无需转发至后端服务器,大幅提升响应速度、降低后端服务器负载和外网带宽消耗。

3.1 缓存核心类型与原理

Nginx 支持多种缓存类型,适用于不同场景,核心为代理缓存(Proxy Cache),其余为扩展类型:

表格

缓存类型 作用场景 核心说明
代理缓存(Proxy Cache) 反向代理模式下,缓存 Tomcat/Apache 等后端服务器的响应内容 服务端缓存,核心缓存类型,本文重点讲解
FastCGI 缓存 缓存 PHP/Python 等通过 FastCGI 协议处理的动态内容 需配合 PHP-FPM 使用,适用于动态脚本服务
uWSGI/SCGI 缓存 缓存通过 uWSGI/SCGI 协议处理的后端内容 类似 FastCGI 缓存,适配小众后端协议
静态资源缓存 缓存图片、CSS、JS 等静态资源 客户端浏览器缓存,通过 expires 指令设置
3.1.1 代理缓存核心原理
  1. 客户端第一次请求资源 A,Nginx 检查缓存,未命中(MISS)则转发请求至后端服务器;
  2. 后端服务器返回资源 A 至 Nginx,Nginx 将资源 A 缓存至本地磁盘;
  3. Nginx 将资源 A 返回给客户端;
  4. 客户端再次请求资源 A,Nginx 检查缓存,命中(HIT)则直接返回本地缓存的资源 A,无需访问后端服务器。

3.2 代理缓存实战配置

代理缓存需基于七层反向代理实现,需先完成七层反向代理配置(参考 2.1 节),再添加缓存相关配置,以下为完整配置步骤。

3.2.1 创建缓存目录并授权

创建 Nginx 缓存存储目录,将目录所属用户 / 组设置为 nginx,避免权限问题:

复制代码
[root@localhost ~]# mkdir -p /data/nginx/cache
[root@localhost ~]# chown -R nginx:nginx /data/nginx/cache
3.2.2 配置 Nginx 代理缓存

编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,在http模块定义缓存全局参数,在location模块启用缓存:

nginx

复制代码
http {
    # 定义缓存全局参数(http模块内)
    proxy_cache_path /data/nginx/cache  # 缓存文件存储路径
    levels=1:2  # 缓存目录层级结构(1级目录+2级子目录)
    keys_zone=my_cache:10m  # 共享内存区(my_cache为名称,10m为大小)
    inactive=60m  # 缓存闲置有效期(60分钟未访问则删除)
    max_size=1g  # 缓存最大磁盘空间(1GB,超出则触发LRU清理)
    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_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;

            # 启用代理缓存
            proxy_cache my_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;        # 404状态码缓存1分钟
            proxy_cache_valid any 5s;        # 其他状态码缓存5秒
            # 添加缓存状态响应头(调试用,可查看缓存命中/未命中)
            add_header X-Cache-Status $upstream_cache_status;
        }
    }
}

核心缓存参数解析

表格

参数 功能说明
keys_zone=my_cache:10m 共享内存区用于存储缓存键和元数据,1MB 约存储 8000 个键
inactive=60m 缓存资源闲置 60 分钟未被访问,自动清理
max_size=1g 缓存最大磁盘容量,超出后按 **LRU(最近最少使用)** 算法清理旧缓存
proxy_cache_key 缓存唯一标识,避免相同资源重复缓存
X-Cache-Status 缓存状态响应头,值包括 MISS(未命中)、HIT(命中)、EXPIRED(过期)等

配置完成后,检查语法并重载 Nginx:

复制代码
[root@localhost ~]# nginx -t && nginx -s reload

3.3 代理缓存验证

使用curl -I命令访问 Nginx 服务器,查看响应头中的X-Cache-Status字段,验证缓存命中状态:

第一步:首次请求(缓存未命中)
复制代码
[root@localhost ~]# curl -I 192.168.10.101
HTTP/1.1 200 OK
Server: nginx/1.26.3
X-Cache-Status: MISS  # 未命中,Nginx向后端请求资源
...
第二步:再次请求(缓存命中)
复制代码
[root@localhost ~]# curl -I 192.168.10.101
HTTP/1.1 200 OK
Server: nginx/1.26.3
X-Cache-Status: HIT   # 命中,Nginx直接返回本地缓存
...
第三步:验证缓存文件

查看缓存目录,确认 Nginx 已将后端资源缓存至本地:

复制代码
[root@localhost ~]# ls /data/nginx/cache
# 可看到生成的缓存目录和文件

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

Rewrite 是 Nginx 的URL 重写模块 ,结合正则表达式可实现 URL 路径美化、旧链接迁移、强制 HTTPS、动态路由等功能,是实现流量灵活调度的核心工具。Rewrite 通常与location指令配合使用,实现更精细的路径控制。

4.1 必备基础:Nginx 正则表达式

Rewrite 的核心是正则表达式匹配,Nginx 支持常用的正则元字符,以下为开发中最常用的正则语法,建议熟记:

表格

正则元字符 描述 示例
^ 匹配输入字符串的起始位置 ^/api:匹配以 /api 开头的 URL
$ 匹配输入字符串的结束位置 /$:匹配以 / 结尾的 URL
* 匹配前面的字符零次或多次 ol*:匹配 o、ol、oll 等
+ 匹配前面的字符一次或多次 ol+:匹配 ol、oll 等,不匹配 o
? 匹配前面的字符零次或一次 do (es)?:匹配 do、does
. 匹配除 \n 外的任意单个字符 .php:匹配任意以.php 结尾的文件
\ 转义字符,匹配原义字符 :匹配 符号
\d 匹配纯数字 \d+:匹配 1 个及以上数字
{n} 重复 n 次 \d {3}:匹配 3 位数字
{n,} 重复 n 次及以上 \d {2,}:匹配 2 位及以上数字
[a-z] 匹配小写字母任意一个 [a-z]+:匹配小写字母组合
[a-zA-Z] 匹配大小写字母任意一个 [a-zA-Z]:匹配单个字母

4.2 必备基础:Nginx location 指令

location用于匹配请求 URI (域名后的路径,不含参数),定义不同的请求处理逻辑,Rewrite 通常在location内执行,二者协作实现精准的 URL 控制。

4.2.1 location 语法与匹配模式

nginx

复制代码
location [匹配模式] /uri {
    # 处理逻辑(rewrite、proxy_pass、return等)
}

location 匹配模式(按优先级从高到低排序):

表格

匹配模式 语法 说明 优先级
精确匹配 location = /uri 仅匹配与 uri 完全一致的请求 最高
精确前缀匹配 location ^~ /uri 匹配以 uri 开头的请求,不触发后续正则匹配 次高
正则匹配(区分大小写) location ~ /uri 按正则匹配 uri,区分大小写 中等
正则匹配(不区分大小写) location ~* /uri 按正则匹配 uri,不区分大小写 中等(与~按文件顺序优先)
普通前缀匹配 location /uri 匹配以 uri 开头的请求,触发后续正则匹配 次低
通用匹配 location / 匹配所有未被上述模式匹配的请求 最低
4.2.2 location 优先级验证

配置不同匹配模式的 location,通过 curl 请求验证匹配结果:

nginx

复制代码
server {
    listen 80;
    server_name example.com;
    default_type text/plain;  # 纯文本返回,避免浏览器下载

    location = /abc { return 200 "精确匹配"; }
    location ^~ /abcdef { return 200 "精确前缀匹配"; }
    location ~ /test/abcdef { return 200 "区分大小写正则"; }
    location ~* /test/abc { return 200 "不区分大小写正则"; }
    location /abc { return 200 "普通前缀匹配"; }
    location / { return 200 "通用匹配"; }
}

重载配置后,执行 curl 请求验证:

复制代码
[root@localhost ~]# curl 192.168.10.101/abc  # 精确匹配
精确匹配
[root@localhost ~]# curl 192.168.10.101/abcdef  # 精确前缀匹配
精确前缀匹配
[root@localhost ~]# curl 192.168.10.101/test/ABC  # 不区分大小写正则
不区分大小写正则
[root@localhost ~]# curl 192.168.10.101/xxx  # 通用匹配
通用匹配

4.3 Rewrite 核心语法与 flag 标记

4.3.1 Rewrite 基本语法

nginx

复制代码
rewrite <regex> <replacement> [flag];
  • regex:正则表达式,匹配需要重写的 URL(仅匹配域名后的路径,不含参数);
  • replacement:重写后的目标 URL;
  • flag:重写标记,控制重写后的请求行为(核心)。
4.3.2 Rewrite 核心 flag 标记

flag 是 Rewrite 的核心,决定了重写后的请求是否继续匹配 location、是否跳转等,以下为 4 个最常用的 flag:

表格

flag 标记 功能说明 适用场景
last 重写后重新触发 location 匹配,执行新 location 的逻辑 内部 URL 重写,路径美化、动态路由
break 重写后不重新匹配 location,直接在当前 location 处理 简单重写,避免循环匹配
redirect 返回 302 临时重定向,浏览器地址栏显示新 URL 临时链接迁移,无需爬虫更新 URL
permanent 返回 301 永久重定向,浏览器地址栏显示新 URL 永久链接迁移,爬虫会更新 URL 至新地址
4.3.3 flag 标记实战验证

1. last 标记:重写后重新匹配 location

nginx

复制代码
server {
    listen 80;
    default_type text/plain;
    location /abc {
        rewrite ^/abc /def last;  # 重写/abc为/def,重新匹配location
    }
    location /def {
        return 200 "this is def";  # 新location的处理逻辑
    }
}

验证:curl 192.168.10.101/abc → 返回this is def,说明重写后匹配了 /def 的 location。

2. break 标记:重写后不重新匹配 location

nginx

复制代码
server {
    listen 80;
    default_type text/plain;
    location /abc {
        rewrite ^/abc /def break;  # 重写后不匹配新location
    }
    location /def {
        return 200 "this is def";
    }
}

验证:curl 192.168.10.101/abc → 返回 404,说明重写后未匹配 /def 的 location,直接访问 /def 物理路径(不存在)。

3. redirect 标记:302 临时重定向

nginx

复制代码
server {
    listen 80;
    default_type text/plain;
    location /abc {
        rewrite ^/abc /def redirect;  # 302临时跳转
    }
    location /def {
        return 200 "this is def";
    }
}

验证:浏览器访问http://192.168.10.101/abc,地址栏跳转为/def,返回 200,网络面板显示 302 状态码。

4. permanent 标记:301 永久重定向

nginx

复制代码
server {
    listen 80;
    default_type text/plain;
    location /abc {
        rewrite ^/abc /def permanent;  # 301永久跳转
    }
    location /def {
        return 200 "this is def";
    }
}

验证:浏览器访问http://192.168.10.101/abc,地址栏跳转为/def,网络面板显示 301 状态码,爬虫会将旧 URL 更新为新 URL。

4.4 Rewrite 高级用法

4.4.1 捕获组:提取 URL 中的参数

通过 ** 小括号 ()** 定义正则捕获组,将匹配的内容存入$1、$2、$3等变量,在重写后的 URL 中引用,实现动态 URL 重写。

示例 :将/category/tech/123重写为/archive/tech/123,提取分类和 ID:

复制代码
server {
    listen 80;
    default_type text/plain;
    # 匹配/category/分类/ID,捕获组1为分类,捕获组2为ID
    location /category/ {
        rewrite /category/(.+)/(\d+)$ /archive/$1/$2 last;
    }
    # 重写后匹配/archive,返回捕获的参数
    location /archive/ {
        return 200 "Category:$1, ID:$2";
    }
}

验证:

复制代码
[root@localhost ~]# curl 192.168.10.101/category/tech/456
Category:tech, ID:456
4.4.2 set 指令:自定义变量

set指令用于定义自定义变量,赋值后可在 Rewrite、return、日志等场景中引用,处理复杂的请求逻辑,语法:

复制代码
set $variable value;

示例:定义变量并在返回内容中引用:

复制代码
server {
    listen 80;
    default_type text/plain;
    location /demo {
        set $name "Nginx";  # 定义变量$name,值为Nginx
        set $version "1.26.3";  # 定义变量$version
        return 200 "Hello, $name! Version: $version";  # 引用变量
    }
}

验证:

复制代码
[root@localhost ~]# curl 192.168.10.101/demo
Hello, Nginx! Version: 1.26.3

4.5 Rewrite 典型应用场景

  1. 路径美化 :将/index.php?id=123美化为/product/123
  2. 强制 HTTPS:将所有 HTTP 请求重定向至 HTTPS;
  3. 域名统一 :将www.xxx.comxxx.com统一为一个域名;
  4. 旧链接迁移 :将过期的/old/*永久重定向至/new/*
  5. SPA 单页应用路由 :将所有非静态资源请求重定向至/index.html
  6. 灰度发布:按 IP/Header 将部分流量重写至新版本服务。

经典示例:强制 HTTPS + 域名统一

nginx

复制代码
server {
    listen 80;
    server_name xxx.com www.xxx.com;
    # 将http://xxx.com和http://www.xxx.com永久重定向至https://www.xxx.com
    rewrite ^(.*)$ https://www.xxx.com$1 permanent;
}

五、总结

Nginx 的四大核心功能围绕代理缓存流量调度展开,各自承担着不同的角色,协同实现 Web 服务的高性能、高可用和高灵活性:

  1. 正向代理:作为客户端的 "中间人",实现内网管控、匿名访问和资源缓存,隐藏客户端真实 IP;
  2. 反向代理:作为服务端的 "智能调度器",七层代理解析应用层内容实现 Web 服务调度,四层代理转发数据流适配非 HTTP 服务,是负载均衡、动静分离的核心;
  3. 缓存机制:基于反向代理缓存,大幅提升资源响应速度,降低后端服务器负载,通过 LRU 算法实现缓存智能管理;
  4. Rewrite 与正则:作为 URL 的 "规则引擎",实现路径美化、链接迁移、强制 HTTPS 等功能,结合 location 实现精细化的流量调度。

掌握这四大核心功能,能够满足绝大多数企业级 Web 服务的配置需求,从基础的服务器代理到高级的流量调度和性能优化,Nginx 都能提供轻量级、高性能的解决方案。在实际生产环境中,需根据业务场景灵活组合配置,同时注重 Nginx 的性能调优和安全防护,构建更稳定、高效的 Web 架构。

后续拓展:Nginx 负载均衡、动静分离、SSL 证书配置、安全防护(防盗链、限流)、高可用(Keepalived+Nginx)等内容,将在后续文章中持续更新,敬请关注!

相关推荐
稀样2 小时前
Nginx限流分析
nginx
阿望要努力上研究生2 小时前
Docker入门常用指令和Docker概念
运维·docker·容器
蜜獾云2 小时前
从linux内核理解Java怎样实现Socket通信
java·linux·运维
战南诚2 小时前
docker的使用技巧
运维·docker·容器
pupudawang2 小时前
使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)指南
运维·nginx·https
痴心阿文2 小时前
Nextjs用法整理
运维·服务器
银河麒麟操作系统2 小时前
银河麒麟服务器操作系统IO机制详解
数据库·redis·缓存
getapi3 小时前
FinalShell 连接 CentOS 7 文件管理失败修复教程
linux·运维·centos
小峰编程3 小时前
二进制安装Nginx——详细
linux·运维·服务器·nginx·云原生